用条件过滤出不同的元素

时间:2012-07-11 19:58:39

标签: c# linq lambda

我有一个对象列表,其中包含一些属性的重复项。我希望根据条件获得所有非重复的以及1个重复项。

例如。

解释

  1. 代码:1,年级:10
  2. 代码:1,年级:20
  3. 代码:2,年级:1
  4. 预期清单:

    1. 代码:1,年级:20
    2. 代码:2,年级:1
    3. 条件是重复元素的条件,抓住具有最高Grade的元素。我如何编写lambda或linq表达式来执行此操作?

3 个答案:

答案 0 :(得分:5)

您可以使用GroupBy执行此操作:

var results = items.GroupBy(item => item.Code)
                   .Select(g => g.OrderByDescending(i => i.Grade)
                   .First());

答案 1 :(得分:0)

我建议您首先GroupBy Code属性,然后选择组中每个元素的Max

答案 2 :(得分:0)

这样的东西
list.GroupBy(item=>item.Code).Select(item=>new {code = item.Key, grade = item.Max(i=>i.Grade)}).ToList();