在具有相同ID的第一个项目之后跳过所有项目

时间:2014-09-10 15:53:17

标签: c# linq select collections

假设我有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并且coIdRegion 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对元素进行分组,之后只选择该组中的第一个元素吗?

1 个答案:

答案 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());

这为您提供了CustomObjectRegion对,以便不重复区域(CustomObject可能会重复)。