-4
請幫我創建一個linq查詢。我有一個類Linq:按範圍計算
class Person
{
string name;
int age;
}
我需要按年齡範圍的人的列表(0至10,10至20個,... 90到100)和計數的數的每個範圍的人的。我也想按名稱過濾列表。例如,每個年齡段都有一些叫「John」的男人。 謝謝。
請幫我創建一個linq查詢。我有一個類Linq:按範圍計算
class Person
{
string name;
int age;
}
我需要按年齡範圍的人的列表(0至10,10至20個,... 90到100)和計數的數的每個範圍的人的。我也想按名稱過濾列表。例如,每個年齡段都有一些叫「John」的男人。 謝謝。
給定
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 }
讓我們瞭解您到目前爲止請嘗試。 –
你卡在哪裏? '.GroupBy()'擴展方法好像可能在這裏很有用。甚至只是一個自定義組類(「AgeGroup」?「PersonGroup」?)和一個循環來填充該類的實例。有可能有很多方法來做到這一點。你有什麼嘗試? – David
謝謝你們。我終於找到了解決方案。這和ASh發佈的一樣。也感謝他。 – user393679