加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – LINQ – 使用OrderBy和GroupBy的子查询

发布时间:2020-12-16 01:48:40 所属栏目:百科 来源:网络整理
导读:我有一些客户和相关订单. 有时我想看到每个客户的所有订单 – 直截了当. 其他时候我想看看每个客户的最后订单,如果他们没有订单我还是想看他们. 继承我的LINQ伪代码: from customers in DataSet.Customersjoin orders in DataSet.Orders on customers.Custo
我有一些客户和相关订单.

有时我想看到每个客户的所有订单 – 直截了当.

其他时候我想看看每个客户的最后订单,如果他们没有订单我还是想看他们.

继承我的LINQ伪代码:

from customers in DataSet.Customers
join orders in DataSet.Orders on customers.CustomerId equals orders.CustomerId
into customerOrders
let customerLastOrder = customerOrders.Select(CustomerId,OrderAmount)
                                      .OrderByDescending(OrderTimestamp)
                                      .GroupBy(CustomerId)

然后我想要总计所有客户最后订单.

我不在那里,你可以看到 – 任何帮助真的很感激.

谢谢,乔

解决方法

我怀疑你想要:

from customer in DataSet.Customers
join order in DataSet.Orders on customer.CustomerId equals order.CustomerId
    into customerOrders
select new {
    CustomerId = customer.Id,LastOrderId = customerOrders.OrderByDescending(order => order.OrderTimestamp)
                                .Select(order => order.OrderId)
                                .FirstOrDefault()
};

无需再执行任何分组 – 群组加入(加入…)已经为您完成了这项任务.您正在查看单个客户的订单,因此您只需要订购它们,选择ID,然后使用FirstOrDefault()获取有序序列中的第一个值(如果序列为空,则为null).

请注意,我更改了范围变量的名称 – 在任何一点,客户指的是单个客户,而订单指的是单个订单.为了便于阅读,在您的查询中保持这种清晰的东西是值得的.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读