2012-12-06 11 views
25

Zastanawiam się, jaka jest różnica między GroupBy i ToLookup Extension Method.lookup vs. groupby

Miejmy listę obiektów tak:

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


List<Person> People { get; set; } 

Teraz mogę korzystać z metod rozszerzenie powyżej:

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

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

Jaka jest różnica między tymi stwierdzeniami?

Z góry dziękuję.

Marco B.

+0

definiuje "różnicę" ... jedną różnicą może być "wartość zwrotu", kolejna konkretna realizacja ... rozbudowana !! –

+0

http://bytes.com/topic/c-sharp/answers/777912-linq-groupby-vs-tolookup –

+1

http://stackoverflow.com/questions/1337539/ilookuptkey-tval-vs-igroupingtkey-tval –

Odpowiedz

50

ToLookup wykorzystuje natychmiastowe wykonanie, i zwraca ILookup który pozwala spojrzeć grupy przez klucz.

GroupBy wykorzystuje odroczone wykonanie, i po prostu powrót grupy w kolejności, w której każda grupa po raz pierwszy spotkałem (więc pierwsza grupa będzie zawierać pierwszy element danych źródłowych, na przykład), nie mając pojęcia bytu potrafić przeglądać grupy później za pomocą klucza. Za każdym razem, gdy będziesz sprawdzać wyniki, będzie musiał ponownie dokonać grupowania.

Zasadniczo, którego należy użyć, zależy od tego, co zamierzasz zrobić z wynikami. Jeśli masz zamiar powtórzyć je tylko raz (na przykład w celu dalszej transformacji), zazwyczaj jest w porządku. Jeśli chcesz zachować je jako kolekcję dla wielu operacji, przydatna jest natychmiastowa natura ToLookup.

9
  1. ToLookup jest buforowany. groupBy iteruje grupy.
  2. groupBy używa funkcji deffered wykonanie, podczas gdy ToLookup używa natychmiast.