【问题标题】:how to group data in Linq with date如何使用日期对 Linq 中的数据进行分组
【发布时间】:2019-11-20 07:24:20
【问题描述】:

我正在使用 Linq 并有 2 个存储记录的表,如下所示

OrderMasterTable
Order_ID  |Place_Date   |ExpectedDelivery_Date  |IsDelivered
==========|=============|=======================|============
1         |1993-02-19   | 1993-02-20  00:01:00  | True
2         |1993-02-20   | 1993-02-20  00:01:00  | True
3         |1993-02-21   | 1993-02-22  00:01:00  | True
4         |1993-02-22   | 1993-02-23  00:01:00  | False


OrderAssignTable
Order_ID  |Delivered_By |Delivery_Date          
==========|=============|=======================
1         |User123      | 1993-02-20   00:01:00         
2         |UserXyz      | 1993-02-20   00:01:01         
3         |User345      | 1993-02-24   00:01:00         

我想按交付日期对输出数据进行分组,使其以下列方式显示:

 Date:  1993-02-20,
 OnTime: 1,
 Delayed:1


Date: 1993-02-22,
OnTime :1,
Delayed: 0

* OnTime if deliveryDateTime is <= ExpectedTime
* Date is deliveryDate

请帮帮我

【问题讨论】:

  • 你的表是如何映射到类的?

标签: c# linq group-by


【解决方案1】:

你可以试试这个。

var query = from assign in OrderAssignTable
            join master in OrderMasterTable on assign.Order_ID equals master.Order_ID
            where master.IsDelivered == true
            group new { assign, master } by assign.Delivery_Date.Date into g
            select new
            {
                Date = g.Key,
                OnTime = g.Count(i => i.assign.Delivery_Date <= i.master.ExpectedDelivery_Date),
                Delayed = g.Count(i => i.assign.Delivery_Date > i.master.ExpectedDelivery_Date)
            };

【讨论】:

    【解决方案2】:

    应该这样做:

    var result = Orders
        .Join(Assigns, o => o.OrderId, a => a.OrderId, (o, a) => new {Order = o, Assign = a})
        .GroupBy(o => o.Order.ExpectedDeliveryDate.Date)
        .Select(g => new
        {
            Date = g.Key,
            OnTime = g.Count(o => o.Assign.DeliveryDate <= o.Order.ExpectedDeliveryDate),
            Delayed = g.Count(o => o.Assign.DeliveryDate > o.Order.ExpectedDeliveryDate)
        })
        .ToArray();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-28
      • 1970-01-01
      • 2015-06-05
      相关资源
      最近更新 更多