我正在学习Linq,所以请多多包涵。 我正在尝试创建一条Linq语句,以从单个客户那里获取最新订单。我尝试了以下操作,但似乎有点不对:
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的信息,如果适用于我的情况,我会感到有些困惑。 谢谢
答案 0 :(得分:0)
如果这是我的错,我表示歉意,但对此问题的标题感到好奇。 @ 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());
答案 1 :(得分:-1)
您可以像这样缩短代码
CustOrder tempOrder = Orders
.OrderByDescending(c => c.OrderDate)
.FirstOrDefault(c => c.CustomerName == "ACME");
其余的代码都可以。您也可以这样做:
IList<CustOrder> tempOrder = Orders
.OrderByDescending(c => c.OrderDate)
.Take(1).ToList();
这会返回一个列表,但有一条记录。