请帮我创建一个linq查询。我有一个班级
class Person
{
string name;
int age;
}
我需要按年龄范围(0到10,10到20,...... 90到100)对人员列表进行分组,并计算每个范围的人数。我还想按名称过滤列表。例如,得到一些名为" John"适用于每个年龄段。 谢谢。
答案 0 :(得分:0)
给出
public class Person
{
public string name;
public int age;
}
您可以使用Where
方法进行过滤,并使用GroupBy
+ Count
进行分组,从而获得所需的结果。由于所有年龄组都是equls(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 }