2016-05-25 22 views
-4

請幫我創建一個linq查詢。我有一個類Linq:按範圍計算

class Person 
{ 
    string name; 
    int age; 
} 

我需要按年齡範圍的人的列表(0至10,10至20個,... 90到100)和計數的數的每個範圍的人的。我也想按名稱過濾列表。例如,每個年齡段都有一些叫「John」的男人。 謝謝。

+1

讓我們瞭解您到目前爲止請嘗試。 –

+1

你卡在哪裏? '.GroupBy()'擴展方法好像可能在這裏很有用。甚至只是一個自定義組類(「AgeGroup」?「PersonGroup」?)和一個循環來填充該類的實例。有可能有很多方法來做到這一點。你有什麼嘗試? – David

+0

謝謝你們。我終於找到了解決方案。這和ASh發佈的一樣。也感謝他。 – user393679

回答

0

給定

public class Person 
{ 
    public string name; 
    public int age; 
} 

你可以得到使用過濾Where方法和GroupBy + Count進行分組期望的結果。由於所有年齡組都是馬爾他(10年),因此age/10是一個很好的分組鍵。

List<Person> L = new List<Person> 
{ 
    new Person{name = "John", age=30}, 
    new Person{name = "John", age=43}, 
    new Person{name = "Sam", age=42}, 
}; 

IEnumerable<Person> seq = L; 

string nameFilter = "John"; 
if (!String.IsNullOrWhiteSpace(nameFilter)) 
    seq = seq.Where(p => p.name == nameFilter); 

var counts = seq.GroupBy(p => p.age/10) 
       .Select(gr => new { AgeGroup = String.Format("{0}-{1}", gr.Key*10, (gr.Key+1)*10), 
            Count = gr.Count()}) 
       .ToList(); 

輸出

{ AgeGroup = 30-40, Count = 1 } 
{ AgeGroup = 40-50, Count = 1 }