我正在尝试使用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;
我哪里错了?
答案 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);