假设我有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
并且coId
中Region
datePublish
,则我只需要留下最近coId
的1个元素。换句话说,对于一个Region
- 一个//list it's List<CustomObject>
var toDelete = ist.SelectMany(r =>
r.subList.Where(m => r.subList.Count() > 2)
.Select(rm => rm.rRegion.regionID));
。我该怎么办?
{{1}}
这段代码选择了重复的区域ID,但接下来我不知道什么。
一些新想法:我可以按regionId对元素进行分组,之后只选择该组中的第一个元素吗?
答案 0 :(得分:0)
您可以选择对(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
可能会重复)。