c# - 在具有 2 个属性的 LINQ 中分组

标签 c# linq group-by

这是一个已经问过的问题,但是 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/

相关文章:

ios - 核心数据按月和总和分组

c# - 如何计算一个除法的无限值?

c# - 循环中委托(delegate)的异步调用

c# - 使用可为空属性过滤嵌套列表

linq - LINQ扩展在CSharpCodeProvider内部不可用

c# - 合并重叠的时间间隔?

python - 在pandas中使用groupby时如何分别求和负值和正值?

mysql - 分组、计数和连续圈数

c# - .Net Framework 中的字符串实习 - 有什么好处以及何时使用实习

C# 开关语句 : More efficient to not use default?