用条件过滤掉不同的元素
我有一个对象列表,其中包含一些属性的重复项。 我想根据条件得到所有非重复的以及1个重复项。
例如。
列表:
- 代码:1,等级:10
- 代码:1,等级:20
- 代码:2,等级:1
预期清单:
- 代码:1,等级:20
- 代码:2,等级:1
条件是重复元素的条件,抓住具有最高Grade
元素。 如何编写lambda或linq表达式来执行此操作?
您可以使用GroupBy
执行此操作:
var results = items.GroupBy(item => item.Code) .Select(g => g.OrderByDescending(i => i.Grade) .First());
我建议你先将GroupBy
的Code
属性,然后选择组中每个元素的Max
就像是
list.GroupBy(item=>item.Code).Select(item=>new {code = item.Key, grade = item.Max(i=>i.Grade)}).ToList();