【发布时间】:2015-05-01 10:06:21
【问题描述】:
给定一个内存中(不是 LINQ to SQL)类列表:
List<MyClass> myItems = /*lots and lots of items*/;
我使用GroupBy() 语句进行分组:
myItems.GroupBy(g => g.Ref)
然后立即在foreach 循环中使用,在“组”上调用.ToList() 是否有任何区别,或者我应该只使用IEnumerable。
完整的代码示例:
与ToList()
List<List<MyClass>> groupedItemsA = new List<List<MyClass>>();
List<List<MyClass>> groupedItemsB = new List<List<MyClass>>();
List<MyClass> myItems = /*lots and lots of items*/;
List<IGrouping<string, MyClass>> groupedItems = myItems.GroupBy(g => g.Ref).ToList();
foreach(IGrouping<string, MyClass> item in groupedItems)
{
if (/*check something*/)
{
groupedItemsA.Add(item.ToList());
}
else
{
groupedItemsB.Add(item.ToList());
}
}
或
使用IEnumerable
List<List<MyClass>> groupedItemsA = new List<List<MyClass>>();
List<List<MyClass>> groupedItemsB = new List<List<MyClass>>();
List<MyClass> myItems = /*lots and lots of items*/;
IEnumerable<IGrouping<string, MyClass>> groupedItems = myItems.GroupBy(g => g.Ref);
foreach(IGrouping<string, MyClass> item in groupedItems)
{
if (/*check something*/)
{
groupedItemsA.Add(item.ToList());
}
else
{
groupedItemsB.Add(item.ToList());
}
}
这些“幕后”的执行计划有什么不同吗?这些中的任何一个会更有效还是真的不重要?
我不在此之后使用groupedItems 列表。
【问题讨论】:
-
要执行查询时使用 ToList()。当您的可枚举(以及因此您的查询)在代码中的稍后点(例如通过另一个 where 条件)扩展时,不要使用 ToList()。
-
为什么不按 /*check something*/ 中的条件分组?
-
“检查某事”依赖于分组。
-
我认为你的两个例子都有一个类型,应该包含
foreach(IGrouping<string, MyClass> item in groupedItems) -
是的,剪切和粘贴错误@Hogan
标签: c# performance linq ienumerable