首页 > 后端开发 > C++ > LINQ的GroupBy操作员如何根据共享属性值有效地汇总对象?

LINQ的GroupBy操作员如何根据共享属性值有效地汇总对象?

Susan Sarandon
发布: 2025-02-02 00:26:09
原创
244 人浏览过

How Can LINQ's GroupBy Operator Efficiently Aggregate Objects Based on Shared Property Values?

高效利用LINQ GroupBy操作符按共享属性值聚合对象

面向对象编程中,多个对象共享特定属性的情况很常见。例如,“Person”类包含“ID”和拥有的汽车列表。为了清晰高效地聚合与每个唯一ID关联的汽车,我们可以使用LINQ的“GroupBy”操作符。

LINQ GroupBy操作符

GroupBy操作符根据指定键的值将对象序列划分为较小的组。在我们的“Person”类中,我们可以使用“PersonId”属性作为键来分组对象。这将有效地创建一个类似字典的结构,其中键是唯一的“PersonId”值,值是与每个“PersonId”关联的“汽车”值的列表。

代码示例

为了按“PersonId”分组“Person”对象并检索相应的汽车列表,我们可以使用以下LINQ查询表达式:

var results = from p in persons
              group p.car by p.PersonId into g
              select new { PersonId = g.Key, Cars = g.ToList() };
登录后复制

或者,我们可以使用非查询表达式实现相同的结果:

var results = persons.GroupBy(
    p => p.PersonId, 
    p => p.car,
    (key, g) => new { PersonId = key, Cars = g.ToList() });
登录后复制

结果

“results”变量现在将包含一个匿名对象的集合,该集合具有两个属性:

  • “PersonId”:人的唯一ID
  • “Cars”:该人拥有的所有汽车的列表

通过迭代“results”集合,我们可以获得每个唯一“PersonId”的所需信息。

其他考虑因素

为了与.NET命名约定保持一致,建议在使用属性名称时使用“PersonId”而不是“PersonID”。

GroupBy与Lookup的比较

或者,可以使用“Lookup”方法代替“GroupBy”来实现类似的结果。“Lookup”有效地创建了一个类似字典的结构,其中键是唯一的“PersonId”值,值是与每个“PersonId”关联的“汽车”值的集合。要使用“Lookup”检索特定人的汽车,我们可以使用以下语法:

var carsForPerson = carsByPersonId[personId];
登录后复制

以上是LINQ的GroupBy操作员如何根据共享属性值有效地汇总对象?的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板