【问题标题】:I need help grouping my data using Linq我需要帮助使用 Linq 对我的数据进行分组
【发布时间】:2014-08-24 01:52:44
【问题描述】:

我有以下对象:

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

有了这个,我有一个列表:

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 日起 1 个月或更短的日期的 AlbumImages 元素,它们都应该在 1 个月分组中。任何从 1980 年 1 月 1 日开始的日期超过 1 个月但小于或等于 2 个月的 AlbumImages 元素,它们应该在 2 个月分组中。等等……

在 Linq 中这样做很简单吗???

【问题讨论】:

  • 你有没有尝试过?当你展示你的努力而不是仅仅要求完整的解决方案时,这很好。
  • 不,因为我不知道该怎么做。

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


【解决方案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有关,您应该能够编写它。

【讨论】:

  • 哦,它比我预期的要简单得多。现在看了你的回答我明白了。谢谢!!
猜你喜欢
  • 1970-01-01
  • 2011-04-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-15
  • 1970-01-01
  • 1970-01-01
  • 2014-06-29
相关资源
最近更新 更多