LINQ:按日期分组,包括年份

时间:2017-11-01 15:40:08

标签: c# sql linq date linq-to-sql

我的数据集看起来像这样:

FileName     Date 
ABC      -    01/10/16
DBC      -    01/11/16
ZYX      -    03/10/16
ABX2      -   01/10/17
IOS       -   01/09/17

如何将这些组合成一组几个月的组合,同时确保在该条款中考虑到这一年?

我目前正在使用LINQ Query按月创建群组但不包括年份,所以我有一组ABC,ZYX和ABX2。尽管ABX2是一份2017年的报告,但同一个月应该是另一组。

我一直在尝试不同的方法,但迄今为止都没有成功。

        var newList = from x in list
                      group x
        by x.Properties.LastModified.Value.Month into lastMod
                      where lastMod.Count() > 1
                      select lastMod;

一旦我将它们放在不同的组中,我会找出最后写的是哪一个并保存并删除其余组。我很困难,并在这个问题上待了半天。我会欣赏新鲜的眼睛。

2 个答案:

答案 0 :(得分:2)

您可以使用复合的年月密钥进行分组,如下所示:

var newList = list
    .Where(x => x.Properties.LastModified.HasValue)
    .GroupBy(x => new {
        x.Properties.LastModified.Value.Month
    ,   x.Properties.LastModified.Value.Year
    })
    .Where(g => g.Count() > 1);

在访问LastModified属性之前,您需要确保Value具有非空值。

答案 1 :(得分:1)

我目前无法对此进行测试,但我认为按照包含月份和年份的匿名类型进行分组应该这样做。

var newList = from x in list
                          group x
            by new {x.Properties.LastModified.Value.Month, x.Properties.LastModified.Value.Year} into lastMod
                          where lastMod.Count() > 1
                          select lastMod;