从列表中删除项目的最佳方法

Cru*_*lIO 2 c# linq ienumerable lambda

我有500.000到1.000.000个实例的列表MyClass,其中包含以下属性:

class MyClass
{
    string ParentId;
    string Name;
    DateTime StartDate;
    DateTime EndDate;
}
Run Code Online (Sandbox Code Playgroud)

数据可能如下所示:

ParentId | Name    | StartDate    | EndDate
----------------------------------------------
parent1  | alpha   | 01-01-2011   | 02-02-2015
parent1  | beta    | 01-01-2011   | 02-02-2014
parent2  | gamma   | 01-01-2012   | 02-02-2011
Run Code Online (Sandbox Code Playgroud)

我需要过滤列表,使其包含"alpha"和"gamma"对象.应该排除"beta"对象,因为它具有与alpha相同的父级,但是具有早期的EndDate.

即结果列表应该每个ParentId只包含一个实例(具有最新EndDate的实例).

过滤需要表现良好.

Kob*_*obi 5

你可以使用GroupBySelect:

var filtered = list
              .GroupBy(mc=>mc.ParentId)
              .Select(g=>g.OrderByDescending(mc=>mc.EndDate).First())
              .ToList();
Run Code Online (Sandbox Code Playgroud)