2014-06-09 2 views
7

자녀의 하위 항목을 어떻게 포함합니까? 나는 하나의 작업 항목을 검색하기 위해 노력하고있어, 그것은 지수 (일대)에 연결된 각각의 인용에 대한 관련 -linq에 중첩 된 하위 엔터티를 포함하는 방법

즉, 잡스는 그냥 명확하게하기 위해 QuoteItems

var job = db.Jobs 
      .Where(x => x.JobID == id) 
      .Include(x => x.Quotes) 
      .Include(x => x.Quotes.QuoteItems) // This doesn't work 
      .SingleOrDefault(); 

이 지수가 QuoteItems (하나의 견적은 여러 개의 견적을 가질 수 있습니다)

내 견적 색인보기에 소계를 SUMming하여 각 견적에 대한 견적 항목의 총계를 표시하려고하기 때문에 제가 묻는 이유는 무엇입니까? 소계를 이렇게 부릅니다.

@item.QuoteItem.Sum(p => p.Subtotal) 

나는이 문제가있는 이유는 위의 Linq 쿼리가 각 Quote에 대해 연결된 QuoteItems를 검색하지 않는다고 생각합니다.

+0

아마도 컴파일러 또는 구문 오류가 발생했을 것입니다. –

+0

그래, 난 그게 구문이 아니라고 확신하고, 내가 무엇을했는지 보여주고 싶었다. – Evonet

+0

'entityframework' 태그가 누락 되었습니까? – flindeberg

답변

17

이 작업 열망로드의 모든 시세 및 그들의 quoteitems을 얻으려면, 당신은 쓰기 :

var job = db.Jobs 
     .Include(x => x.Quotes.Select(q => q.QuoteItems)) 
     .Where(x => x.JobID == id) 
     .SingleOrDefault(); 

당신은 대신에 SelectMany을해야 할 수도 있습니다 of QuoteItems도 컬렉션 인 경우 선택하십시오.

다른 사람에 대한 참고 사항; 강력한 형식의 Include() 메서드는 확장 메서드이므로 using System.Data.Entity;을 파일 맨 위에 포함해야합니다.

+0

이것은 트릭을 했어, 고마워. – Evonet

6

이 (우리가 엔티티 프레임 워크 이야기 주어진 당신이 아이 엔티티를 가져 오기 할) 일을 할 것입니다 : http://msdn.microsoft.com/en-us/library/bb738708(v=vs.110).aspx

:

var job = db.Jobs 
      .Include(x => x.Quotes) // include the "Job.Quotes" relation and data 
      .Include("Quotes.QuoteItems") // include the "Job.Quotes.QuoteItems" relation with data 
      .Where(x => x.JobID == id) // going on the original Job.JobID 
      .SingleOrDefault(); // fetches the first hit from db. 

Include 문에 대한 자세한 내용은이를 보라

+0

당신이 사용하려고했는데 .Include after where 절? –

+0

이것은 매우 기괴한 답변입니다. –

+0

@DanielKelley Eh? ObjectQuery? 그것은 당신이 그것을 슬프게하는 방식입니다. – flindeberg

2

@flindeberg가 여기에서 말했듯이 이것은 나에게 트릭이었습니다. 목록의 각 상위 항목에 하위 항목이 있는지 확인하기 만하면됩니다.

List<WCF.DAL.Company> companies = dbCtx.Companies.Where(x=>x.CompanyBranches.Count > 0) 
          .Include(c => c.CompanyBranches) 
          .Include("CompanyBranches.Address") 
          .ToList(); 
관련 문제