跳过第一个id相同的项目之后的所有项目
本文关键字:项目 之后 第一个 id | 更新日期: 2023-09-27 18:21:19
假设我有List<CustomObject> list
。
CustomObject
具有下一个结构:
public class CustomObject
{
public int coId{get;set;}
public List<SubCustObj> subList{get;set;}
public DateTime datePublish{get;set;}
}
public class SubCustObj
{
public int Id{get;set;}
public Region rRegion{get;set;}
}
// Region : for you it's only important to know that it has regionId
如果列表中存在CustomObject
和Region
中相同的coId
,我只需要留下一个元素和最近的datePublish
。换言之,对于一个coId
-一个Region
。我该怎么做?
//list it's List<CustomObject>
var toDelete = ist.SelectMany(r =>
r.subList.Where(m => r.subList.Count() > 2)
.Select(rm => rm.rRegion.regionID));
这段代码选择了重复的区域id,但我不知道接下来要做什么。
一些新想法:我可以按regionId对元素进行分组,然后只选择该组中的第一个元素吗?
您可以选择成对的(Region, CustomObject)
,按datePublish
排序,按地区分组,并从每组中选择第一个项目:
var res = list
.SelectMany(c => c.subList.Select(s => new {Custom = c, Region = s.rRegion}))
.OrderByDescending(p => p.Custom.datePublish)
.GroupBy(p => p.regionId)
.Select(g => g.First());
这为您提供了成对的CustomObject
、Region
,这样区域就不会重复(不过CustomObject
s可能会重复)。