高效利用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”变量现在将包含一个匿名对象的集合,该集合具有两个属性:
通过迭代“results”集合,我们可以获得每个唯一“PersonId”的所需信息。
其他考虑因素
为了与.NET命名约定保持一致,建议在使用属性名称时使用“PersonId”而不是“PersonID”。
GroupBy与Lookup的比较
或者,可以使用“Lookup”方法代替“GroupBy”来实现类似的结果。“Lookup”有效地创建了一个类似字典的结构,其中键是唯一的“PersonId”值,值是与每个“PersonId”关联的“汽车”值的集合。要使用“Lookup”检索特定人的汽车,我们可以使用以下语法:
var carsForPerson = carsByPersonId[personId];
以上是LINQ的GroupBy操作员如何根据共享属性值有效地汇总对象?的详细内容。更多信息请关注PHP中文网其他相关文章!