我有数百万个元素的非常大的集合。我需要将所有内容保存为IEnumerable,否则我会得到一个OutOfMemoryException。 我的问题是我必须做一些这样的分组:
IEnumerable<MyClass> mycollection = dao.RetrieveBigCollection-();
var mycollection = mycollection.GroupBy(x => x.Date1);
稍后在程序中,该集合将由一些使用反射的库提取。问题是,在分组后,集合的类型为IGrouping,并且此库需要IEnumerable<MyClass>
。我需要将它转换回IEnumerable<MyClass>
,我的约束是我不能调用ToList(),否则我得到一个OutOfMemoryException。
有什么想法吗?
答案 0 :(得分:1)
GroupBy
返回IEnumerable<IGrouping<TKey, TSource>>
,您可以展平:
groupings.SelectMany(x => x);
但是,你仍然会遇到内存问题,因为分组内部会将一个集合保存在内存中,所以无论如何你的整个枚举都会被拉入内存。
答案 1 :(得分:1)
嗯,现在已经很晚了,但是对于其他可能会来看的人,你应该可以使用Select
:
IEnumerable<MyClass> mycollection = dao.RetrieveBigCollection-();
var mycollection = mycollection.GroupBy(x => x.Date1)
.Select(xg => xg.Select(x => x));
结果将是IEnumerable<IEnumerable<MyClass>>
。