2013-03-06 3 views
0

RSVP 목록과 함께 손님 목록을 반환하는 다음 쿼리가 있습니다. 그러나 사용자가 이벤트 당 여러 개의 회신을 가질 수 있기 때문에 최신 정보 만 얻고 싶습니다. RSVP 테이블에 제출 된 날짜 열이 있습니다.LINQ 쿼리 - 키로 최신 레코드 얻기

from guest in Guests 
       join rsvp in RSVPs.Where(o => o.EventID == "1234") 
       on guest.UserName equals rsvp.UserName into sr 
       from x in sr.DefaultIfEmpty() 
       select new 
       { 
        guest, 
        x 
       } 
+0

당신이'ORDERBY의 x.DateProperty의 descending'를 사용하여 시도 해 봤나 : 그렇지

context.RSVPs.Include("Guest").Where(o => o.EventID =="1234").OrderByDesc(o=>o.SubmittedDate).FirstOrDefault() 

이 옵션이 될 수 있는가? – fiberOptics

답변

0

날짜를 기준으로 주문과 1을 :

(from guest in Guests 
      join rsvp in RSVPs.Where(o => o.EventID == "1234") 
      on guest.UserName equals rsvp.UserName into sr 
      from x in sr.DefaultIfEmpty() 
      orderby x.RSVPDate desc 
      select new 
      { 
       guest, 
       x 
      }) 
.Take(1); 
+0

이것은 게스트 당 작동합니다. 여러 손님을 위해 할 수 있기를 바란다. – user1106741

0

의사 적 -

group x by username into g 
select new { 
    UserName = g.key // username 
    FirstRsvp = g.OrderByDescending(item => item.RsvpDate).FirstOrDefault() 
} 

그리고 이런 종류의 물건은 SQL에서 정의되지 않을 수 있으므로 희망이 객체에 LINQ는 공급자. SQL이고 구현되지 않은 경우 .AsEnumerable()이 쿼리를 메모리로 가져오고 거기에서 L2O가됩니다.

0
from guest in Guests 
       join rsvp in RSVPs.Where(o => o.EventID == "1234") 
       on guest.UserName equals rsvp.UserName into sr 
       from x in sr.DefaultIfEmpty() 
       select new 
       { 
        guest, 
        guest.RSVPs.Where(o => o.EventID =="1234") 
           .OrderByDesc(o=>o.SubmittedDate) 
           .FirstOrDefault() 
       } 

사실, 당신이이 일을 시도 할 수 있습니다, 아이디어는 외래 키 관계가 주어진 권리 RSVP를로드하고 첨부 게스트 객체를로드 할 수 있습니다.

(from rsvp in context.RSVP 
where rsvp.EventId == "1234" 
join guest in context.Guests on rsvp.UserName equals guest.UserName 
select new {rsvp, guest} 
orderby desc rsvp.SubmittedDate).FirstOrDefault()