我正在学习LINQ,我正在试图弄清楚如何让最后一个订单的所有成员都失败(每个成员可以有很多订单)。出于效率原因,我想在LINQ中将其全部放入列表中,如果可能的话。
到目前为止,我认为这是让所有成员获得最近加入的失败订单的正确方法(cutoffDate是当前日期-10天)。
var failedOrders =
from m in context.Members
from o in context.Orders
where m.DateJoined > cutoffDate
where o.Status == Failed
select m;
我希望我需要使用Last或LastOrDefault,或者我可能需要使用
orderby o.OrderNumber descending
然后按照this stackoverflow回答中的建议获取First或FirstOrDefault。
请注意,我只想查看给定成员的最后一个订单,看看是否失败了(不只是找到最后一个失败的订单)。
答案 0 :(得分:1)
通常你会写一些类似的东西:
var failedOrders = from m in context.Members
where m.DateJoined > cutoffDate
select new
{
Member = m,
LastOrder = m.Orders.OrderByDescending(x => x.OrderNumber).FirstOrDefault()
} into mlo
// no need for null checks here, because the query is done db-side
where mlo.LastOrder.Status == Failed
select mlo; // or select mlo.Member to have only the member
如果存在Members.Orders
关系