2011-11-16 56 views
1

我想選擇TeamMembers,如果可用,選擇相關的用戶。實體框架 - linq和空值

public IEnumerable<RetailersFiveTeamMember> GetRetailersFiveTeamMembers(int retailLeaderID) 
    { 
     var members = this.EntityDataModel.DD_RetailersFiveTeamMember.Where(d => d.CMS_User1.UserID == retailLeaderID) 
      .Select(d => new RetailersFiveTeamMember 
     { 
      DateCreated = d.DateCreated, 
      Email = d.Email, 
      User = new CMSUser() { UserEnabled = d.CMS_User.UserEnabled } 
     }).ToArray(); 

     return members; 

如果我執行這個查詢,我得到以下錯誤(這是預期的,因爲CMS_User可以爲null):

演員陣容價值型Boolean失敗,因爲物化價值是null。結果類型的泛型參數或查詢都必須使用可爲空的類型。

然後我用這段代碼試了一下:

User = d.CMS_User == null ? null : new CMSUser() { UserEnabled = d.CMS_User.UserEnabled } 

然後我得到這個異常:

無法創建MsRetailClub.Core.Entities.RetailersFive.CMSUser類型的恆定值。在此上下文中僅支持基本類型(如Int32StringGuid)。

任何人都可以告訴我正確的方法嗎? 非常感謝!

+0

看來你的問題與CMS_User1關係。 –

+1

爲什麼不寫用戶= d.CMS_User? – Svarog

+0

Hey Svarog:d.CMS_User有很多我不需要的屬性。所以如果可能的話我想選擇我想要的屬性。 –

回答

1

我認爲這不是說d.CMS_User的值爲空(我認爲這個異常會像'對象引用等等'),但d.CMS_User.UserEnabled爲空。

如果相應的數據庫字段是可爲空的布爾值,則會發生這種情況。然後,您可以將其映射到C#中的可空布爾值(bool?)或使用缺省值作爲空值。

我建議改變CMSUser的definiton使用

public bool? UserEnabled {get; set;} 

,但你也可以做

... 
User = new CMSUser() 
{ 
    UserEnabled = d.CMS_User.UserEnabled ?? false; 
} 
...