[英]C# LINQ convert IEnumerable<IGrouping> to IEnumerable<IEnumerable> elegantly?
If you have an IEnumerable<IGrouping<K, T>>
, say from如果您有
IEnumerable<IGrouping<K, T>>
,请从
var ans = src.GroupBy(s => s.Field);
Is there a better way (rarely used LINQ method/variation) to convert to an IEnumerable<IEnumerable<T>>
then nested Select
s like so:有没有更好的方法(很少使用 LINQ 方法/变体)转换为
IEnumerable<IEnumerable<T>>
然后嵌套Select
s,如下所示:
var ans2 = ans.Select(g => g.Select(s => s));
For those that aren't understanding,不懂的人,
var anst = ans2.Select(g => g.GetType().ReflectedType).All(t => t == typeof(Enumerable));
should return anst == true
.应该返回
anst == true
。
避免嵌套选择的一种解决方案是使用AsEnumerable()
方法。
var ans = src.GroupBy(s => s.Field).Select(e => e.AsEnumerable());
In this case IGrouping already implements that interface:在这种情况下, IGrouping 已经实现了该接口:
public static class Program
{
static void Main(string[] args)
{
var foo = new[] {
new MyClass { a = "1", b = "2"},
new MyClass { a = "1", b = "3"},
new MyClass { a = "2", b = "4"},
new MyClass { a = "2", b = "5"} };
var ans = foo.GroupBy(x => x.a);
IEnumerable<IEnumerable<MyClass>> ans2 = ans;
IEnumerable<IEnumerable<MyClass>> result = ans2.ToArray();
}
private class MyClass
{
public string a;
public string b;
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.