我有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);
我不确定这是否有帮助。对我而言,它更难读。所以,仍然是同一个问题,我如何使其更具可读性。
答案 0 :(得分:1)
LINQ就是这样的。如果没有以某种方式实际使用SelectMany
和GroupBy
,就没有其他方法可以让它发挥作用。
你真的应该感到高兴,因为我看过许多LINQ查询,这些查询复杂得多,难以理解。对我来说,该查询仍然非常简单,并清楚地表达了意图。实际上很容易遵循每一步。