按分组和日期收集的不同值

Distinct value from collection by grouping and date

我有一个具有属性 'level'、'section'、'theme' 和 'date' 的 Umbraco 节点列表,前三个是字符串,最后一个是 DateTime .

我需要过滤我的列表,以便每个条目都是唯一的,基于 'level'、'section' 和 'them' 的组合。但是如果发现重复项,select 保留在列表中的节点应该是日期最早的节点。

我一直在尝试使用 LINQ 和 Lambdas 解决这个问题,但几个小时后终于碰壁了。

例子

预过滤

level    section    theme    date
a        b          c        01/02/2003
d        b          c        01/04/2003
a        b          c        23/02/2015
d        b          c        12/12/2003
d        b          c        28/10/2003

post-过滤

level    section    theme    date
a        b          c        01/02/2003
d        b          c        01/04/2003

按级别、部分和主题分组。如果有多个条目,select 最早日期的条目。

可能非常简单,但我是 C#/LINQ 的新手。任何帮助表示赞赏。

这应该是您要查找的内容:

var ans1 = from s in src
           group s by new { s.level, s.section, s.theme } into sg
           select new { sg.Key.level, sg.Key.section, sg.Key.theme, date = sg.Min(s => s.date) };

GroupBy 通常在查询理解中更容易理解,但如果您更喜欢 lambda 语法

var ans2 = src.GroupBy(s => new { s.level, s.section, s.theme }, (skey, sg) => new { skey.level, skey.section, skey.theme, date = sg.Min(s => s.date) });