
使用LINQ按键分组对象
面向对象编程中,根据公共属性或键分组对象非常有用。本例探讨如何使用LINQ(语言集成查询)按PersonID分组对象,并获取与每个人关联的汽车列表。
假设我们有一个名为Person的类:
1 2 3 4 5 | class Person
{
public int PersonID;
public string Car;
}
|
登录后复制
我们还有一个Person对象的列表:
此列表可能包含多个具有相同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 | 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 | var carsForPerson = carsByPersonId[personId];
|
登录后复制
通过使用这些技术,您可以使用C#和LINQ有效地按公共键分组对象,并以简洁高效的方式检索关联数据的列表。 代码示例已改进,更符合C#的编码规范。
以上是如何使用c#中的linq通过键进行对象?的详细内容。更多信息请关注PHP中文网其他相关文章!