使用Linq获得仅重复的最大值

时间:2016-07-21 21:57:56

标签: c# linq

我正在尝试使用Linq来返回我的对象​​中具有特定属性值重复的所有项目,以及所有重复项的另一个特定属性的最大值。

我的对象具有属性CourseInfoId,这是我想要检查重复项和属性优先级,我想要最大值(以及许多其他属性)。

我认为这会奏效,但它会给我物品中的每件物品。

var group = from a in r
    group a by a.CourseInfoId into b
    let maxPriority = b.Max(d => d.Priority)
    where b.Skip(1).Any()
    from c in b
    where c.Priority == maxPriority
    select c;

我哪里错了?

1 个答案:

答案 0 :(得分:1)

您要做的是按CourseInfoId进行分组,然后对具有多个项目的组进行过滤,该项目将为您提供所有重复项目。接下来,您必须再次展平组并从结果中获取最大属性值。

var maxPriority = items
    .GroupBy(i => i.CourseInfoId)
    .Where(g => g.Count() > 1)
    .SelectMany(g => g)
    .Max(i => i.Priority);

编辑:我现在看到您只想检查重复项的属性,而不是所有具有重复ID的项目。您所要做的就是跳过.SelectMany()电话中每组的第一项:

var maxPriority = items
    .GroupBy(i => i.CourseInfoId)
    .Where(g => g.Count() > 1)
    .SelectMany(g => g.Skip(1))
    .Max(i => i.Priority);