2013-03-06 60 views
0

我有以下查询返回给我一个宾客列表以及RSVP列表。但是,由于用户每个事件可以有多个RSVP,我只想获得最新的。 RSVPs表格有一个提交的日期列。LINQ Query - 通过键获取最新的记录

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

您是否尝试过使用'排序依据x.DateProperty descending'? – fiberOptics 2013-03-06 01:42:02

回答

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 2013-03-06 01:53:59

0

假性 -

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

希望这是因为这样的事情可能不会在SQL中定义的LINQ to对象供应商。如果它是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和负载连接的客人对象,给予有一个外键关系。

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

否则,这可能是一个选项:

(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()