2014-02-18 72 views
0

我使用linq來獲取一對多關係的實體。 一個客戶有很多賬戶。EF6導航屬性映射空集合而不是null

  var query = from c in db.Client 
         where c.MetaProps.Deleteflag == 0 
         && c.ContractNumber.Equals(clientNumber) 
         select new 
         { 
          Client = c, 
          Accounts = c.Accounts.Where(a => a.IsActive), 
         }; 
      contract = query.FirstOrDefault().Client; 

問題是,當數據庫中沒有帳戶時,帳戶列表爲空。有沒有辦法將它初始化爲空列表,就像使用.Include()時一樣?

+0

您是否嘗試過在默認構造函數中創建列表? – Swell

+0

@Swell匿名類型沒有默認構造函數。我不知道這個方法是返回一個元組還是什麼,但那會是它自己的小代碼味道。 – 48klocs

+0

@Swell現在我會使用yor解決方案,謝謝。如果你把它寫成答案,我會接受它。 –

回答

1

當然,您可以使用空合併運算符。

var query = from c in db.Client 
      where c.MetaProps.Deleteflag == 0 
      && c.ContractNumber.Equals(clientNumber) 
      select new 
      { 
       Client = c, 
       Accounts = c.Accounts.Where(a => a.IsActive) ?? Enumerable.Empty<Account>() 
      }; 
contract = query.FirstOrDefault().Client; 
+0

我得到了:LINQ to Entities無法識別方法'System.Collections.Generic.IEnumerable'1 [Vault.Models.DbModels.Account] Empty [Account]()'方法,並且此方法無法轉換爲存儲表達式。 –

+0

@Evgeni要麼你必須在''using''中包含'System.Linq',要麼在你完成數據庫調用並且讓你的匿名類型完成之後,你只需要合併它。 – 48klocs