Linq:按范围计算

时间:2016-05-25 19:10:50

标签: c# linq

请帮我创建一个linq查询。我有一个班级

class Person
{
    string name;
    int age;
}

我需要按年龄范围(0到10,10到20,...... 90到100)对人员列表进行分组,并计算每个范围的人数。我还想按名称过滤列表。例如,得到一些名为" John"适用于每个年龄段。 谢谢。

1 个答案:

答案 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 }
相关问题