通过分组和日期收集的不同价值

时间:2017-05-23 22:38:48

标签: c# linq umbraco

我有一个Umbraco节点列表,其中包含属性“level”,“section”,“theme”和“date”,前三个是字符串,最后一个是DateTime。

我需要过滤我的列表,以便每个条目都基于'level','section'和'them'的组合而是唯一的。但是,如果找到重复项,则选择保留在列表中的节点应该是具有最早日期的节点。

我正在尝试使用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

后滤波

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

按级别,部分和主题分组。如果有多个条目,请选择具有最早日期的条目。

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

1 个答案:

答案 0 :(得分:1)

这应该是你要找的东西:

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) });