2016-11-06 120 views
2

我有一個包含三個屬性(名稱,嚴重性和出現次數)的對象列表。我需要檢索所有匹配最高嚴重性的名稱,然後檢索嚴重性最高的匹配項。基於兩個屬性從列表中檢索多個對象

所以給出的列表,如:

Name: Sev: Occ: 
Foo  3  2 
Bar  2  3 
Foobar 2  3 

我希望找回富。

給出一個列表,例如:

Name: Sev: Occ: 
Foo  3  3 
Bar  3  3 
Foobar 2  4 

我希望找回富酒吧。

我認爲重要的是要注意我只需要返回的名稱,並且由於對象列表相對較小,我不關心多個循環...除了每次更改值時都會運行表格。

我承認我的linq-fu是可悲的不足。到目前爲止,我已經嘗試使用morelinq,使兩遍......

List<Offenders> offenderList = new List<Offenders>(); 

// offenderList.Add appropriate data objects 

var offSev = offenderList.MaxBy(x => x.Severity); 
var offOcc = offSev.MaxBy(x => x.Occurrence); 

我的希望是有一個只有我想要的結果列表(offOcc),然後我可以通過.Names屬性迭代那個報告。相反,我得到的是一個錯誤:'違者'在第二條語句中不包含'MaxBy'的定義。

回答

0

更改您的第一個語句是:

var offSev = offenderList.MaxBy(x => x.Severity).ToList(); 
0

簡單,試試這個:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 

namespace ConsoleApplication1 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      List<Offenders> offenderList = new List<Offenders>() { 
       new Offenders() { name = "Foo", sev = 3, occ = 3}, 
       new Offenders() { name = "Bar", sev = 3, occ = 3}, 
       new Offenders() { name = "Foobar", sev = 2, occ = 4} 
      }; 

      var results = offenderList.GroupBy(x => new { x.sev, x.occ }).OrderByDescending(x => x.Key.sev).ThenByDescending(x => x.Key.occ).FirstOrDefault(); 
      Console.WriteLine(string.Join(",",results.Select(x => x.name).ToArray())); 
      Console.ReadLine(); 
     } 
    } 
    public class Offenders 
    { 
     public string name { get; set; } 
     public int sev { get; set; } 
     public int occ { get; set; } 
    } 

} 
相關問題