我正在学习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
,然后得到这个stackoverflow答案中建议的First或FirstOrDefault。
请注意,我只想查看给定成员的最后一个订单,看看它是否失败(而不仅仅是查找最后一个失败的订单)。
通常你会这样写:
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
关系