GroupMany等价物

时间:2013-11-26 09:45:38

标签: c# linq

我有IEnumerable<S> S { T: a; IEnumerable<U> : b},我想将其分组到IGrouping<T, U>,以便每个键a与任何b中的所有元素U相关联与那把钥匙相同的S是。 (这听起来真的很复杂,但是一旦你想象出我真正想要在你头脑中进行的操作,它变得非常清晰,看起来很简单)这样做的正确方法是什么?我目前做的是

ienum.SelectMany(i => i.b.Select(b => new { i.a, b }))
     .GroupBy(i => i.a, i => i.b);

但我不能说我发现任何形式或形式的清晰或可读,而不是所有干燥。当然,应该有更好的方法吗?

编辑:在评论中,据说a,b和i代表相当不受欢迎的阅读。所以让我们更具体一点。可以说S现在是Office { Manager manager, IEnumerable<Employee> employees}。这就产生了一个问题:给我一个所有经理人员给他们的员工。这就是等效陈述

offices.SelectMany(office => office.employees.Select(employee => new { office.manager, employee }))
       .GroupBy(pair => pair.manager, pair => i.employee);

我不确定这是否有帮助。对我而言,它更难读。所以,仍然是同一个问题,我如何使其更具可读性。

1 个答案:

答案 0 :(得分:1)

LINQ就是这样的。如果没有以某种方式实际使用SelectManyGroupBy,就没有其他方法可以让它发挥作用。

你真的应该感到高兴,因为我看过许多LINQ查询,这些查询复杂得多,难以理解。对我来说,该查询仍然非常简单,并清楚地表达了意图。实际上很容易遵循每一步。