📅  最后修改于: 2023-12-03 15:32:39.334000             🧑  作者: Mango
GroupBy
方法是Linq中非常有用的一种操作,它可让程序员根据特定的键(属性)对集合中的元素进行分组,这让我们省去了手动编写遍历、判断、分类等复杂代码的苦恼。
当然,单键(单属性)的分组很简单,但有些场景需要多键(多属性)进行分组,这时我们就要使用GroupBy
方法的另一种形式——GroupBy Multiple
。
这个方法最常用的场景就是SQL
中GROUP 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
表中按name
和date
分组,再使用Sum
方法将每组中的quantity
字段求和,并返回新的匿名类型列表。
这里需要注意,我们使用了new { }
语法创建了一个匿名类型对象,用来作为GroupBy
的键(key),在这个对象中又分别指定了Name
和Date
两个属性。最终查询语句中的SELECT
和GROUP BY
部分被合并在了GroupBy
方法中。
另外,我们也可以使用GroupBy
方法将“同名”属性的元素分组,例如:
var result = list.GroupBy(p => new { p.Name, p.Age });
这段代码将按照Name
和Age
两个属性分组。仅当这两个属性的值都相同时,它们才会被视为“同一组”。
LINQ
的强大功能让我们在进行集合操作时,更加高效、优雅、简洁。掌握GroupBy Multiple
方法的使用,能够更好地实现“多维”分组操作,让我们的程序更智能、更灵活。