2011-11-16 2 views
1

TeamMembers를 선택하고 사용 가능한 경우 관련 사용자를 선택하고 싶습니다. 나는이 쿼리를 실행하면합니다 (CMS_User가 null이 될 수 있기 때문에, 예상되는)Entity Framework - linq 및 null 값

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; 

, 나는 다음과 같은 오류가 발생합니다 :

값 유형 Boolean에 캐스트에 실패 구체화 된 값 때문에 null입니다. 결과 유형의 제네릭 매개 변수 또는 쿼리가 null 가능 유형을 사용해야합니다.

그럼이 코드 조각으로 그것을 시도 : 유형 MsRetailClub.Core.Entities.RetailersFive.CMSUser의 상수 값을 만들

없습니다

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

가 그럼 난이 예외를 얻을. 이 컨텍스트에서는 기본 유형 (예 : Int32, StringGuid) 만 지원됩니다.

누구든지 내게 올바른 방법을 보여줄 수 있습니까? 감사합니다.

+0

이 문제가 CMS_User1 관계와 관련이 보인다 할 수 있습니다. –

+1

왜 작성하지 User = d.CMS_User? – Svarog

+0

안녕하세요. Svarog : d.CMS_User에는 내가 필요로하지 않은 많은 속성이 있습니다. 그래서 가능한 한 원하는 특성을 선택하고 싶습니다. –

답변

1

나는 그것이 d.CMS_User 값이 null (나는 예외가 'Object reference etc ...'와 같을 것이라고 생각하지 않는다)라고 생각하지만, d.CMS_User.UserEnabled은 null이다.

해당 데이터베이스 필드가 nullable 부울 인 경우 발생합니다. 그런 다음 C# (bool?)의 nullable 부울로 매핑하거나 null에 대한 기본값을 사용할 수 있습니다.

나는

public bool? UserEnabled {get; set;} 

를 사용하는 CMSUser의 definiton를 변경 제안하지만 당신은 또한

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