按统计信息的年龄对用户进行分组

时间:2016-05-18 14:13:48

标签: asp.net-mvc c#-4.0 group-by linq-to-entities

首先,我的问题与this one非常相似。事实上,它是一样的,除了我需要将每个用户分组如下:

  1. 12岁以下的所有人(独家)
  2. 然后,从12 - 19
  3. 然后,从20 - 29
  4. ...
  5. 超过80(含)
  6. 根据dasblinkenlight在另一个问题中的答案,我能够做到:

    var ageStats = vModel
                              .GroupBy(l => 10 * (l.Age / 10))
                              .OrderBy(x => x.Key)
                              .Select(g => new
                              {
                                  Name = g.Key,
                                  Count = g.Select(l => l.Age).Count()
                              }).ToList();
    

    对于结果集:

    1. 0-9
    2. 10-19
    3. 20-29
    4. ...
    5. 那么我该怎样做才能完成我必须的模式?

      非常感谢!!

3 个答案:

答案 0 :(得分:2)

var ages = new[] { 12, 19, 29, 80 };

var grouped = ages.Select(r => new {
                Name = r,
                Count = vModel.Count(x => x.Age >= r)
            });

答案 1 :(得分:0)

试试这个,但我不知道表现

var ages = new int[12, 19, 29, 80];
var func = new Func<int, int>(a=>{

    for(var i = 0; i<ages.Length; i++){
        if(a<ages[i])
            continue;
        return i;
    }
    return 0;
});
vModel.GroupBy(m=>func(m.Age))....

答案 2 :(得分:0)

您可以使用提及here的方法并使用此代码:

var ages = new List<int> { 12, 19, 29, 39, 49, 59, 69, 80, int.MaxValue};
var categories = vModel.GroupBy(item => ages.FirstOrDefault(ceil => ceil >= item));