.NET Framework 通过...分组

示例

var persons = new[] {
    new { Name="Fizz", Job="Developer"},
    new { Name="Buzz", Job="Developer"},
    new { Name="Foo", Job="Astronaut"},
    new { Name="Bar", Job="Astronaut"},
};

var groupedByJob = persons.GroupBy(p => p.Job);

foreach(var theGroup in groupedByJob)
{
    Console.WriteLine(
        "{0} are {1}s", 
        string.Join(",", theGroup.Select(g => g.Name).ToArray()),
        theGroup.Key);
}

//Fizz,Buzz是开发人员
//Foo,Bar是宇航员

按国家/地区对发票分组,生成一个新对象,其中包含记录数,已付总金额和已付平均金额

var a = db.Invoices.GroupBy(i => i.Country)
          .Select(g => new { Country = g.Key,
                             Count = g.Count(),
                             Total = g.Sum(i => i.Paid),
                             Average = g.Average(i => i.Paid) });

如果我们只想要总数,就没有组

var a = db.Invoices.GroupBy(i => 1)
          .Select(g => new { Count = g.Count(),
                             Total = g.Sum(i => i.Paid),
                             Average = g.Average(i => i.Paid) });

如果我们需要数

var a = db.Invoices.GroupBy(g => 1)
          .Select(g => new { High = g.Count(i =>i.Paid>= 1000),
                             Low = g.Count(i =>i.Paid< 1000),
                             Sum = g.Sum(i => i.Paid) });