gpt4 book ai didi

c# - Linq 查询按日期对项目进行计数和分组

转载 作者:太空宇宙 更新时间:2023-11-03 21:13:32 25 4
gpt4 key购买 nike

我收藏了 Orders从 EF 中提取。每个Order有一个订购日期:

public class Order {
public DateTime Date { get; set; }
public int Id { get; set; }
}

我希望能够运行查询以返回特定日期范围内每一天的订单数量。查询方法应该类似于:

public class ICollection<OrderDateSummary> GetOrderTotalsForDateRange(DateTime startDate, DateTime endDate) {

var orderDateSummary = Set.SelectMany(u => u.Orders) // ..... grouping/totalling here?!

return orderDateSummary;
}

有关信息,Set实际上是返回用户聚合根的存储库的一部分,因此 Set 的类型是DbSet<User>我坚持的一点是对 Orders 进行分组和总计可从 SelectMany 查询方法。

OrderDateSummary 类如下所示:

public OrderDateSummary {
DateTime Date { get; set; }
int Total { get; set; }
}

因此,开始日期为 01/01/2016 和结束日期为 03/01/2016 的输出类似于:

Date          Total
===================
01/01/2016 10
02/01/2016 2
03/01/2016 0
04/01/2016 12

最佳答案

如我所见,您需要生成从 startend 范围内的所有日期。然后计算每个日期的订单总数。

DateTime start = new DateTime(2016, 1, 1);
DateTime end = new DateTime(2016, 1, 4);
Enumerable
.Range(0, 1 + (end - start).Days)
.Select(x => start.AddDays(x))
.GroupJoin(Set.SelectMany(u => u.Orders),
dt => dt, o => o.Date.Date,
(dt, orders) => new OrderDateSummary { Date = dt, Total = orders.Count() })
.ToList();

查看 working example on Ideone .

关于c# - Linq 查询按日期对项目进行计数和分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36081105/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com