2016-07-21 36 views
0

我试图使用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

什么你想要做的就是按CourseInfoId,然后上有超过1个项目,这将让你所有重复的项目组进行筛选。接下来,您必须再次将这些组展平,并从结果中获取最大的属性值。

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);