2014-06-06 3 views
0

이 LINQ 문을 Lambda 표현식으로 변환하려고합니다.where 절이있는 LINQ lambda

totalTickets = context.EventParentSponsors 
    .Join(context.EventSponsors, 
     parent => parent.EventSponsorId, 
     sponsor => sponsor.EventSponsorId, 
     (parent, sponsor) => new { sponsor.InvitationCount }) 
    .Where(o => o.EventParentSponsors.ParentSponsorId).FirstOrDefault(); 

을하지만 난 실종 무엇이 오류

AnonymousType#1' does not contain a definition for 'EventParentSponsors' 
and no extension method 'EventParentSponsors' accepting a first argument of type  'AnonymousType#1' could be found 

를 얻을 :

totalTickets = (from parent in context.EventParentSponsors 
    join sponsor in context.EventSponsors 
    on parent.EventSponsorId equals sponsor.EventSponsorId 
    where parent.ParentSponsorID == parentId 
    select sponsor.InvitationCount).FirstOrDefault(); 

이것은 내가 지금까지 가지고 무엇인가?

답변

2

보십시오이 하나

totalTickets = context.EventParentSponsors.Join(context.EventSponsors, 
               x=>x.EventSponsorId, 
               y=>y.EventSponsorId, 
               (x,y) => 
               new 
               { 
                ID=x.ParentSponsorID , 
                Count = x.InvitationCount 
               }) 
              .Where(x=>x.ID==parentId) 
              .Select(x=>x.Count) 
              .FirstOrDefault(); 
+0

... .Join에서 부모 스폰서 ID를 버렸기 때문에 .Where 절에서 필터링 할 수 없습니다. .Join 앞에 .Where 절을 옮겨서 먼저 필터를 수행 할 수도 있습니다. (덧붙여 결과는'totalTickets'라고 부릅니다. 그러나 이것은 합계가 아닙니다 - 맞습니까?) – Rup

+0

답장을 보내 주셔서 감사합니다.하지만 x.InvitationCount가 아니라'x.Count'가 아니길 원합니다. – Imad

+0

@SMI 그는 중간에있는 익명 유형의 Count로 InvitationCount의 이름을 변경했습니다. 이는 동일한 것이어야합니까? 원하는 경우 'InvititationCount = x.InvitationCount'로 변경할 수 있습니다. – Rup

2

당신이 LINQPad를 사용하는 경우이 방법은 람다 형태의 모습을 보여 종류의 것입니다 :

totalTickets = context.EventParentSponsors 
    .Join(context.EventSponsors, 
     parent => parent.EventSponsorId, 
     sponsor => sponsor.EventSponsorId, 
     (parent, sponsor) => new { parent = parent, sponsor = sponsor }) 
    .Where(o => o.parent.EventParentSponsors.ParentSponsorId == parentId) 
    .Select(o => o.sponsor.InvitationCount) 
    .FirstOrDefault(); 

누락 된 주요 부분에 당신의 투사. 쿼리 구문을 사용하는 경우, 당신은 기본적으로 모두 부모와 자식 요소를 투영됩니다

(parent, sponsor) => new { parent = parent, sponsor = sponsor }) 

이 그래서 당신이 미래의 표현에 대한 각면에 대해 모든 권한을가집니다.

+0

+1 LinqPad 권장 사항 –