首页 > 后端开发 > C++ > 如何使用c#中的linq通过键进行对象?

如何使用c#中的linq通过键进行对象?

Mary-Kate Olsen
发布: 2025-02-02 00:21:10
原创
845 人浏览过

How Can I Group Objects by a Key Using LINQ in C#?

使用LINQ按键分组对象

面向对象编程中,根据公共属性或键分组对象非常有用。本例探讨如何使用LINQ(语言集成查询)按PersonID分组对象,并获取与每个人关联的汽车列表。

假设我们有一个名为Person的类:

1

2

3

4

5

class Person

{

    public int PersonID;

    public string Car; // 将car改为Car,符合C#命名规范

}

登录后复制

我们还有一个Person对象的列表:

1

List<Person> persons;

登录后复制

此列表可能包含多个具有相同PersonID的实例。例如:

1

2

3

4

5

6

persons = new List<Person>()

{

    new Person { PersonID = 1, Car = "Ferrari" },

    new Person { PersonID = 1, Car = "BMW" },

    new Person { PersonID = 2, Car = "Audi" }

};

登录后复制

我们的目标是按PersonID分组这些对象,并获取每个人拥有的所有汽车的列表。预期结果如下所示:

1

2

3

4

5

class Result

{

    public int PersonID;

    public List<string> Cars;

}

登录后复制

分组后,我们将得到:

1

2

3

4

5

6

// 示例结果,实际结果由LINQ查询生成

var results = new List<Result>()

{

    new Result { PersonID = 1, Cars = new List<string> { "Ferrari", "BMW" } },

    new Result { PersonID = 2, Cars = new List<string> { "Audi" } }

};

登录后复制

为此,我们可以利用LINQ的GroupBy方法:

1

2

3

var results = from p in persons

              group p.Car by p.PersonID into g

              select new Result { PersonID = g.Key, Cars = g.ToList() };

登录后复制

在GroupBy子句中,我们将PersonID指定为分组的键,并投影Car属性。生成的序列将是一组与各自汽车列表关联的键。

或者,可以使用Lookup字典来实现相同的结果:

1

var carsByPersonId = persons.ToLookup(p => p.PersonID, p => p.Car);

登录后复制

这将创建一个字典,其中键是PersonID,值是每个人的汽车列表。要检索特定人的汽车,可以使用:

1

2

// 这将返回一个空序列,对于查找中不存在的personId

var carsForPerson = carsByPersonId[personId];

登录后复制

通过使用这些技术,您可以使用C#和LINQ有效地按公共键分组对象,并以简洁高效的方式检索关联数据的列表。 代码示例已改进,更符合C#的编码规范。

以上是如何使用c#中的linq通过键进行对象?的详细内容。更多信息请关注PHP中文网其他相关文章!

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