.jpg)
假设我们有一个这样的类:
class Person {
internal int PersonID;
internal string car;
}
我有一个此类的列表:List<Person> persons;
此列表可以有多个具有相同 s 的实例,例如:PersonID
persons[0] = new Person { PersonID = 1, car = "Ferrari" };
persons[1] = new Person { PersonID = 1, car = "BMW" };
persons[2] = new Person { PersonID = 2, car = "Audi" };
有没有办法让我分组并获取他拥有的所有汽车的列表?PersonID
例如,预期结果将是
class Result {
int PersonID;
List<string> cars;
}
所以分组后,我会得到:
results[0].PersonID = 1;
List<string> cars = results[0].cars;
result[1].PersonID = 2;
List<string> cars = result[1].cars;
从我到目前为止所做的:
var results = from p in persons
group p by p.PersonID into g
select new { PersonID = g.Key, // this is where I am not sure what to do
有人可以指出我正确的方向吗?

网友回答:
var results = from p in persons
group p by p.PersonID into g
select new { PersonID = g.Key,
/**/car = g.Select(g=>g.car).FirstOrDefault()/**/}

网友回答:
你也可以试试这个:
var results= persons.GroupBy(n => new { n.PersonId, n.car})
.Select(g => new {
g.Key.PersonId,
g.Key.car)}).ToList();

网友回答:
绝对 – 你基本上想要:
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() });
基本上,该组的内容(当被视为一个)是给定键的投影(在本例中)中存在的任何值的序列。IEnumerable<T>p.car
有关工作原理的更多信息,请参阅我关于该主题的Edulinq帖子。GroupBy
(我在上面重命名为 ,以遵循 .NET 命名约定,这些约定在“大写复合词和常用术语”部分中特别指出了这一点。PersonIDPersonId
或者,您可以使用:Lookup
var carsByPersonId = persons.ToLookup(p => p.PersonId, p => p.car);
然后,您可以非常轻松地为每个人获得汽车:
// This will be an empty sequence for any personId not in the lookup
var carsForPerson = carsByPersonId[personId];
模板简介:该模板名称为【在 LINQ 中分组依据如何实现】,大小是暂无信息,文档格式为.编程语言,推荐使用Sublime/Dreamweaver/HBuilder打开,作品中的图片,文字等数据均可修改,图片请在作品中选中图片替换即可,文字修改直接点击文字修改即可,您也可以新增或修改作品中的内容,该模板来自用户分享,如有侵权行为请联系网站客服处理。欢迎来懒人模板【C#】栏目查找您需要的精美模板。