📜  linq group by multiple (1)

📅  最后修改于: 2023-12-03 15:32:39.334000             🧑  作者: Mango

LINQ GroupBy Multiple

GroupBy方法是Linq中非常有用的一种操作,它可让程序员根据特定的键(属性)对集合中的元素进行分组,这让我们省去了手动编写遍历、判断、分类等复杂代码的苦恼。

当然,单键(单属性)的分组很简单,但有些场景需要多键(多属性)进行分组,这时我们就要使用GroupBy方法的另一种形式——GroupBy Multiple

使用方法

这个方法最常用的场景就是SQLGROUP BY语句的转换。我们可以使用GroupBy方法将SQL表达式转换为LINQ表达式,实现对集合进行多重分组。

// SQL:
// SELECT name, SUM(quantity) as total_qty
// FROM orders
// GROUP BY name, date

// LINQ:
var result = orders.GroupBy(o => new {o.Name, o.Date})
                   .Select(g => new {Name = g.Key.Name, Date = g.Key.Date, TotalQty = g.Sum(o => o.Quantity)});

上面的代码将orders表中按namedate分组,再使用Sum方法将每组中的quantity字段求和,并返回新的匿名类型列表。

这里需要注意,我们使用了new { }语法创建了一个匿名类型对象,用来作为GroupBy的键(key),在这个对象中又分别指定了NameDate两个属性。最终查询语句中的SELECTGROUP BY部分被合并在了GroupBy方法中。

另外,我们也可以使用GroupBy方法将“同名”属性的元素分组,例如:

var result = list.GroupBy(p => new { p.Name, p.Age });

这段代码将按照NameAge两个属性分组。仅当这两个属性的值都相同时,它们才会被视为“同一组”。

结语

LINQ的强大功能让我们在进行集合操作时,更加高效、优雅、简洁。掌握GroupBy Multiple方法的使用,能够更好地实现“多维”分组操作,让我们的程序更智能、更灵活。