我有一个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的新手。任何帮助表示赞赏。
答案 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) });