2014-02-08 2 views
0

EF 4를 사용하고 있으며 Consultant, User 및 OrganisationArea 엔티티가 있습니다. 각 컨설턴트 엔티티에는 사용자 탐색 속성이 있으며 각 사용자 엔티티는 많은 OrganisationAreas에 할당 될 수 있습니다. 나는 특정 OrganisationArea에 배정 된 컨설턴트 목록을 임베디드 사용자 속성과 함께 얻으려고합니다.LINQtoEntities에 nav 속성을 검색하지 않습니다.

내 컨설턴트 엔티티는 사용자의 재산과 같이 그것의 뒤따라야과 성을 결합하여 컨설턴트의 전체 이름을 반환하는 읽기 전용 속성이있다 :

public string FullName 
{ 
    get { return User.Forename + " " + User.Surname; } 
} 

이 Linq를 작동 다음, 그것을 검색하는 컨설턴트는 필요에 따라 할당되지만 사용자 속성은 포함하지 않습니다. 왜 볼 수 있니?

var result = from c in _dbContext.Consultants.Include("User") 
      from u in _dbContext.SystemUsers 
      from oa in _dbContext.OrganisationAreas 
      where oa.OrganisationAreaId == _sharedInfo.LoggedInSite.OrganisationAreaId 
       && u.Current 
       && c.UserId == u.UserId 
       && c.User.Sites.Count(s => s.OrganisationAreaId == _sharedInfo.LoggedInSite.OrganisationAreaId) > 0 
      select c; 

내가 만들

와 유형 컨설턴트의 ObservableCollection에와 컬렉션에 전체 이름 속성을 결합하려고까지 새로운는, 사용자가 null입니다.

익명 형식을 선택하고 consultant.user에 액세스하여 다음과 같이 내 익명 형식을 반복하면서 해결했습니다. 그러나 놓친 내용을 이해하고 싶습니다.

var result = from c in _dbContext.Consultants 
      from u in _dbContext.SystemUsers 
      from oa in _dbContext.OrganisationAreas 
      where oa.OrganisationAreaId == _sharedInfo.LoggedInSite.OrganisationAreaId 
       && u.Current 
       && c.UserId == u.UserId 
       && c.User.Sites.Count(s => s.OrganisationAreaId == _sharedInfo.LoggedInSite.OrganisationAreaId) > 0 
      select 
      new 
      { 
       Consultant = c, 
       User = c.User 
      }; 

var theConsultants = result.ToList(); 
ConsultantUsers = new ObservableCollection<Consultant>(); 

foreach (var rec in theConsultants) 
{ 
    ConsultantUsers.Add(rec.Consultant); 
} 

도움 주셔서 감사합니다.

답변

0

쿼리 모양이 변경되지 않을 경우 Linq to Entities는 Include(...)을 통해 열심히로드됩니다. 임의의 조인을 지정하지 않고 세 가지 다른 DbSet<T> 중에서 선택하고 내 내기가 L2E는 쿼리의 모양이 무엇인지 알 수 없습니다. oa은 나머지 쿼리에도 적용되지 않습니다. 왜 그렇습니까?

_dbContext.Consultants.Include("User") 
    .Where(c => 
     c.User.Current && 
     c.User.Sites.Any(s => 
      s.OrganisationAreaId == _sharedInfo.LoggedInSite.OrganisationAreaId)) 
: (내가 쿼리의 나머지 부분에 어떤 관련이 있는지 말할 수 _dbContext.OrganisationAreas에 대한 참조없이)

는 쿼리에 대한 나의 제안이다
관련 문제