LINQ查询-按键获取最新记录
本文关键字:获取 最新 新记录 查询 LINQ | 更新日期: 2023-09-27 18:02:41
我有以下查询,它向我返回一个来宾列表和一个RSVP列表。然而,由于用户每个事件可以有多个RSVP,我只想得到最新的。RSVP表有一个提交日期列。
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
}
按日期排序,取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);
伪-
group x by username into g
select new {
UserName = g.key // username
FirstRsvp = g.OrderByDescending(item => item.RsvpDate).FirstOrDefault()
}
希望这是对对象的LINQ,因为这类东西可能不会在SQL提供程序中定义。如果它是SQL并且没有实现。AsEnumerable((将把查询拉到内存中,然后它将从此成为L2O。
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()