跳过第一个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

如果列表中存在CustomObjectRegion中相同的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对元素进行分组,然后只选择该组中的第一个元素吗?

跳过第一个id相同的项目之后的所有项目

您可以选择成对的(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());

这为您提供了成对的CustomObjectRegion,这样区域就不会重复(不过CustomObject s可能会重复)。