【发布时间】:2016-02-12 00:16:51
【问题描述】:
我通过对两个参数进行分组并根据 createdate(使用 first())选择子组列表中的最新类型来过滤列表。 这消除了 x.application 和 x.externalid 属性上的重复项。
var list = ((List<SomeType>)xDic)
.GroupBy(x => new {x.Application, x.ExternalID})
.OrderByDescending(z => z.First().CreateDate)
.Select(y => y.First()).ToList();
我遇到的麻烦是定义另一个属性组合(x.application 和 x.externaldisplayid)来过滤和分组以获取第一个。
总而言之,我需要通过根据 ((x.application/x.externalid) OR (x.application/x.externaldisplayid)) 组合过滤掉任何重复项来获得 SomeTypes 的唯一列表。
Example set:
{ "extID": 1234, "extDspID" : 111, "App" : "Test", "CreateDate": 2/01/2015}
{ "extID": 1234, "extDspID" : 5, "App" : "Test", "CreateDate": 1/01/2015}
{ "extID": 012, "extDspID" : 90, "App" : "Mono", "CreateDate": 6/06/2015}
{ "extID": 999, "extDspID" : 78, "App" : "Epic", "CreateDate": 8/08/2015}
{ "extID": 333, "extDspID" : 78, "App" : "Epic", "CreateDate": 8/12/2015}
{ "extID": 345, "extDspID" : 33, "App" : "Test", "CreateDate": 2/01/2015}
{ "extID": 666, "extDspID" : 33, "App" : "Test", "CreateDate": 1/01/2015}
desired result:
{ "extID": 1234, "extDspID" : 111, "App" : "Test", "CreateDate": 2/01/2015}
{ "extID": 012, "extDspID" : 90, "App" : "Mono", "CreateDate": 6/06/2015}
{ "extID": 333, "extDspID" : 78, "App" : "Epic", "CreateDate": 8/12/2015}
{ "extID": 345, "extDspID" : 33, "App" : "Test", "CreateDate": 2/01/2015}
【问题讨论】:
-
我正在尝试理解您的问题。你能提供你的类的定义(
SomeType)吗? -
看起来像 stackoverflow.com/questions/11811110/… 的副本(但不完全确定)
-
@B.ClayShannon - 我必须考虑最近创建的维度,因此 distinct 并不能完全解决我的问题。
-
你能具体解释一下
((x.application/x.externalid) OR (x.application/x.externaldisplayid)) combinations是什么意思吗? -
我怀疑你无法解释你想要的事实是问题所在:) 这些重复项中的所有 3 个都是 {A1,id1,disp1}, {A1,id1,disp2}, {A1 ,id2,disp2}?
标签: c# .net linq duplicates filtering