C# LINQ语句从单个客户处获取最新订单
我在学习Linq,所以请耐心听我说。 我试图创建一个Linq语句,从单个客户那里获取最新订单。我尝试了以下方法,但似乎有点不对劲:C# LINQ语句从单个客户处获取最新订单,c#,linq,C#,Linq,我在学习Linq,所以请耐心听我说。 我试图创建一个Linq语句,从单个客户那里获取最新订单。我尝试了以下方法,但似乎有点不对劲: CustOrder tempOrder = Orders .OrderByDescending(c => c.OrderDate) .Where(c => c.CustomerName == "ACME") .FirstOrDefault(); 我的想法正确吗?如果我想得到最古老的订单,我会这样做: CustOrder temp
CustOrder tempOrder = Orders
.OrderByDescending(c => c.OrderDate)
.Where(c => c.CustomerName == "ACME")
.FirstOrDefault();
我的想法正确吗?如果我想得到最古老的订单,我会这样做:
CustOrder tempOrder = Orders
.OrderBy(c => c.OrderDate)
.Where(c => c.CustomerName == "ACME")
.FirstOrDefault();
我正在阅读关于GroupBy的文章,我有点困惑它是否适用于我的情况。
谢谢您可以像这样缩短代码
CustOrder tempOrder = Orders
.OrderByDescending(c => c.OrderDate)
.FirstOrDefault(c => c.CustomerName == "ACME");
代码的其余部分还可以。您也可以这样做:
IList<CustOrder> tempOrder = Orders
.OrderByDescending(c => c.OrderDate)
.Take(1).ToList();
IList tempOrder=订单
.OrderByDescending(c=>c.OrderDate)
.Take(1.ToList();
这将返回一个列表,但只有一条记录。如果我在这里出错,我深表歉意,但我对这里问题的标题感到好奇。 @7VNT-你的意思是,你想得到每位客户的第一份和最后一份订单吗?这就是你提到GroupBy的原因吗 在这种情况下,您可以执行以下操作
var firstOrders = Orders.GroupBy(x=>x.CustomerName)
.Select(c => c.OrderBy(x=>x.OrderDate).First());
var lastOrders = Orders.GroupBy(x=>x.CustomerName)
.Select(c => c.OrderByDescending(x=>x.OrderDate).First());
那么你现在得到了什么结果?那么你希望得到什么呢?你可以编辑你的问题来反映这一点。我将把
Where
和OrderByDescending
顺序颠倒过来。首先筛选,然后对筛选后的枚举进行排序。您的枚举有什么问题?怎么会“有点差”?吉米,这真的重要吗?EF自动创建SQL。我不认为OrderBy的顺序会引起这里的问题。我说(最后一句话)我的评论更多的是关于你在代码中指定的类型……它不应该是一个列表吗?
?哦,对不起,我忘了修改那个部分。谢谢你的评论