查找与groupby

时间:2012-12-06 08:14:02

标签: c# .net linq

我想知道groupBy和ToLookup扩展方法之间有什么区别。

让我们得到一个像这样的对象列表:

public class Person
{
    public uint Id { get; set; }
    public string Name { get; set; }
    public DateTime Birthday { get; set; }
}


List<Person> People { get; set; }

现在我可以使用上面的扩展方法:

var groupedPeople = People.GroupBy((x) => x.Id);

var lookupPeople = People.ToLookup((x) => x.Id);

这些陈述之间有什么区别?

提前致谢。

Marco B.

2 个答案:

答案 0 :(得分:64)

ToLookup使用立即执行,并返回ILookup,可让您按键查找组。

GroupBy使用延迟执行,只是按照第一次遇到每个组的顺序返回组(因此第一个组将包含源数据的第一个元素,例如),不知道以后能否通过密钥查看组。每次迭代结果时,都必须再次分组。

基本上,您应该使用哪种取决于您要对结果做什么。如果您只是一次迭代它们(例如进一步转换),GroupBy通常很好。如果您希望将它们保留为多个操作的集合,ToLookup的直接性质很有用。

答案 1 :(得分:12)

  1. ToLookup已缓冲。 groupBy迭代这些组。
  2. groupBy使用deffered执行,而ToLookup使用immediate。