LINQ声明以获取单个客户的最新订单

时间:2018-12-14 19:03:03

标签: c# linq

我正在学习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的信息,如果适用于我的情况,我会感到有些困惑。 谢谢

2 个答案:

答案 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();

这会返回一个列表,但有一条记录。