LINQ with groupby and count

前端 未结 3 1289
情话喂你
情话喂你 2020-11-22 17:32

This is pretty simple but I\'m at a loss: Given this type of data set:

UserInfo(name, metric, day, other_metric)

and this sample data set:

3条回答
  •  误落风尘
    2020-11-22 17:55

    After calling GroupBy, you get a series of groups IEnumerable, where each Grouping itself exposes the Key used to create the group and also is an IEnumerable of whatever items are in your original data set. You just have to call Count() on that Grouping to get the subtotal.

    foreach(var line in data.GroupBy(info => info.metric)
                            .Select(group => new { 
                                 Metric = group.Key, 
                                 Count = group.Count() 
                            })
                            .OrderBy(x => x.Metric))
    {
         Console.WriteLine("{0} {1}", line.Metric, line.Count);
    }
    

    > This was a brilliantly quick reply but I'm having a bit of an issue with the first line, specifically "data.groupby(info=>info.metric)"

    I'm assuming you already have a list/array of some class that looks like

    class UserInfo {
        string name;
        int metric;
        ..etc..
    } 
    ...
    List data = ..... ;
    

    When you do data.GroupBy(x => x.metric), it means "for each element x in the IEnumerable defined by data, calculate it's .metric, then group all the elements with the same metric into a Grouping and return an IEnumerable of all the resulting groups. Given your example data set of

                   | Grouping Key (x=>x.metric) |
    joe  1 01/01/2011 5  | 1
    jane 0 01/02/2011 9  | 0
    john 2 01/03/2011 0  | 2
    jim  3 01/04/2011 1  | 3
    jean 1 01/05/2011 3  | 1
    jill 2 01/06/2011 5  | 2
    jeb  0 01/07/2011 3  | 0
    jenn 0 01/08/2011 7  | 0
    

    it would result in the following result after the groupby:

    (Group 1): [joe  1 01/01/2011 5, jean 1 01/05/2011 3]
    (Group 0): [jane 0 01/02/2011 9, jeb  0 01/07/2011 3, jenn 0 01/08/2011 7]
    (Group 2): [john 2 01/03/2011 0, jill 2 01/06/2011 5]
    (Group 3): [jim  3 01/04/2011 1]
    

提交回复
热议问题