繁体   English   中英

LINQ和按日期范围分组数据

[英]LINQ & Grouping data by a date range

假设我有以下数据集,希望根据匹配描述的日期是否在几秒钟之内将“描述”列分组。

在此处输入图片说明

我正在寻找的输出是该组的描述和最小日期。 描述可能相同,但日期可能不同,在这种情况下,我需要两个输出行。

在上述情况下,请查看描述“ TEST s”,在该处我想要两个输出的分组行

测试s 2014-12-04 16:27:44.903

测试2014-12-04 17:21:21.233

使用Linq可以吗?

尝试这个:

var q = from item in lstMyTable
        group item by item.ItemDate.ToString("MM/dd/yyyy HH:mm") into ItemGroup
        select new
        {
            Description = ItemGroup.First().Description,
            Date = ItemGroup.OrderBy(x => x.ItemDate).First().ItemDate
        };

上面的linq查询按日期+小时+分钟分组,忽略秒。 如OP中所述,应用于ItemGroupOrderBy可确保我们获得最短日期。

使用此输入:

List<MyTable> lstMyTable = new List<MyTable>()
{
  new MyTable() { Description = "TEST s", ItemDate = new DateTime(2014, 12, 4, 16, 27, 11) },
  new MyTable() { Description = "TEST s", ItemDate = new DateTime(2014, 12, 4, 16, 27, 12) },
  new MyTable() { Description = "TEST s", ItemDate = new DateTime(2014, 12, 4, 16, 27, 13) },

  new MyTable() { Description = "TEST s", ItemDate = new DateTime(2014, 12, 4, 17, 21, 11) },
  new MyTable() { Description = "TEST s", ItemDate = new DateTime(2014, 12, 4, 17, 21, 12) },
  new MyTable() { Description = "TEST s", ItemDate = new DateTime(2014, 12, 4, 17, 21, 13) }
};

您得到以下结果:

[0] = { Description = "TEST s", Date = {4/12/2014 4:27:11 pm} }
[1] = { Description = "TEST s", Date = {4/12/2014 5:21:11 pm} }

如果您也想按描述分组,则只需用sth代替group by子句,如下所示:

group item by new 
{ 
   a = item.ItemDate.ToString("MM/dd/yyyy HH:mm") ,
   b = item.Description 
} into ItemGroup

最后,通过将Datetime字段转换为Ticks ,您可以弄乱各个记录之间所需的时间距离,例如

group item by new 
{ 
    a = item.ItemDate.Ticks.ToString().Substring(0, item.ItemDate.Ticks.ToString().Length - 10), // instead of .ToString("MM/dd/yyyy HH:mm") ,
    b = item.Description 
} into ItemGroup

您可以通过改变从item.ItemDate.Ticks减去的位数来item.ItemDate.Ticks ,例如用10替换9或8,等等。

如果您希望左侧为列表,则可以尝试此操作

var query = (from t in db.Table
             group t by new {t.Description, t.Date }
             into grp
             select new
             {
                 grp.Key.Description,
                 grp.Key.Date,                        
             }).ToList();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM