这是一个已经问过的问题,但是 that question是只使用 2 个属性,我需要使用 3 个属性,所以我复制粘贴了大部分文本。
假设我们有一个类
class Person {
internal int PersonID;
internal string car ;
internal string friend ;
}
现在我有这个类的列表:List persons;
现在这个列表可以有多个相同 PersonID 的实例,例如。
persons[0] = new Person { PersonID = 1, car = "Ferrari" , friend = "Josh" };
persons[1] = new Person { PersonID = 1, car = "BMW" , friend = "Olof" };
persons[2] = new Person { PersonID = 2, car = "Audi" , friend = "Gustaf" };
有没有一种方法可以按 PersonID 分组并获取他拥有的所有汽车和 friend 的列表?例如,预期结果将是:
class Result {
int PersonID;
List<string> cars;
List<string> friends;
}
从我目前所做的来看:
IEnumerable resultsForDisplay = ResultFromSQL_Query.GroupBy(
p => p.PersonId.ToString(),
p => p.car,
(key, g) => new { PersonId = key, car = g.ToList()});
但现在我无法在 resultsForDisplay
中获取 friend's
数组
最佳答案
当然,您可以对组 g
执行 LINQ 查询还有,比如:
IEnumerable<Result> resultsForDisplay = from q in ResultFromSQL_Query
group q by q.PersonID into g
select new <b>Result</b> {PersonID = g.Key,<b>cars = g.Select(x => x.car).ToList(), friends = g.Select(x => x.friend).ToList()</b>};
或者使用lambda 表达式:
IEnumerable<Result> results = persons.GroupBy(x => x.PersonID)
.Select(g => new Result { PersonID = g.Key, <b>cars = g.Select(x => x.car).ToList(), friends = g.Select(x => x.friend).ToList()</b>};
因此您可以对组执行任何 LINQ 查询(因此在该组的元素上表现为 IEnumerable<>
),如 .Select(..)
, 还有 .Sum(..)
, .Average(..)
和其他子查询、聚合等。
关于c# - 在具有 2 个属性的 LINQ 中分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44556408/