我需要帮助使用Linq对数据进行分组

时间:2014-08-24 01:52:44

标签: c# .net linq linq-to-objects

我有以下对象:

internal class AlbumImage
{
    internal string AlbumName { get; set; }
    internal string ImagePath { get; set; }
    internal DateTime DateTaken { get; set; }
}

有了这个,我有一个List:

private List<AlbumImage> _albumImages;

我想根据拍摄日期对此列表进行分组。我们的想法是,对于每个元素,将根据特定日期(预定义)检查所采用的日期,因此,例如,假设我们使用日期1980年1月1日。

我想将数据分组如下:

1 month

2 months

3 months

4 months

5 months

6 months

7 months

8 months

9 months

10 months

11 months

12 months

18 months

24 months

36 months

48 months

etc.

这个想法是,在一年后,分组会变为6个月。

回到我1980年的日期,从1980年1月1日开始,任何AlbumImages元素的日期为1个月或更短,它们应该在1个月的分组中。从1980年1月1日起,任何AlbumImages元素的日期超过1个月但不超过2个月,它们应该在2个月的分组中。等等......

在Linq ???中这很简单吗

1 个答案:

答案 0 :(得分:1)

使用LINQ非常简单:

var specificDate = new DateTime(1980, 1, 1);
var results = (from x in input
              group x by GetGroup(x, specificDate) into g
              select new {
                  Time = g.Key, 
                  Images = g.ToList()
              }).ToList();

当然我假设你已经有一个名为GetGroup(DateTime date, DateTime startDate)的方法,它遵循你所描述的逻辑:返回1,2,3,4,...,12,18,24,...,与LINQ无关,你应该能够写它。