Linq查询获得唯一和排序

Mic*_*ips 1 c# linq

我需要一个linq查询来获取唯一的对象列表,按Dep分组它们并获得具有最高进度的值.我有一个对象列表,如下所示:

List<SomeObjects> lstObjects:
    lstObjects[0] - Dep: Marketing Comp:ABC  Progress: 1
    lstObjects[1] - Dep: Sales     Comp:ABC  Progress: 2
    lstObjects[2] - Dep: Marketing Comp:DEF  Progress: 2
    lstObjects[3] - Dep: Marketing Comp:DEF  Progress: 3
    lstObjects[4] - Dep: Sales     Comp:ABC  Progress: 1
    lstObjects[5] - Dep: Marketing Comp:ABC  Progress: 2
    lstObjects[6] - Dep: Marketing Comp:ABC  Progress: 1
    lstObjects[7] - Dep: Marketing Comp:ABC  Progress: 1
Run Code Online (Sandbox Code Playgroud)

正如您所见,Dep:Marketing Comp:ABC,通过不同的Progress进行重复:我必须获得具有最高进度的对象的唯一列表.

    Eg: lstObjects[0] - Dep: Marketing Comp:ABC  Progress: 1
        lstObjects[5] - Dep: Marketing Comp:ABC  Progress: 2

        Here I should get, lstObjects[5] - Dep: Marketing Comp:ABC  Progress: 2

    In, lstObjects[2] - Dep: Marketing Comp:DEF  Progress: 2
        lstObjects[3] - Dep: Marketing Comp:DEF  Progress: 3

        In this I should get lstObjects[3] - Dep: Marketing Comp:DEF  Progress: 3

    In, lstObjects[1] - Dep: Sales     Comp:ABC  Progress: 2
        lstObjects[4] - Dep: Sales     Comp:ABC  Progress: 1

        In this I should get lstObjects[3] - Dep: Sales Comp:ABC  Progress: 2

        Finally my list should be:
        1)Dep: Marketing Comp:ABC  Progress: 2
        2)Dep: Marketing Comp:DEF  Progress: 3
        3)Dep: Sales     Comp:ABC  Progress: 2
Run Code Online (Sandbox Code Playgroud)

提前致谢.

Har*_*sad 5

你可以使用GroupByon DepComp.

var result = lstObjects
     .GroupBy(x=> new {x.Dep, x.Comp})
     .Select(x=> new 
      {
          Department = x.Key.Dep, 
          Comp = x.Key.Comp ,
          Progress =  x.Max(x => m.Progress)   
      });
Run Code Online (Sandbox Code Playgroud)