2009-08-10 10 views
13

Po prostu uczę się LINQ i doszedłem do blokady dla początkujących w moim projekcie testowym. Czy możesz wyjaśnić, co robię źle?Jak przekonwertować plik IQueryable <T> na listę <T>?

public List<ToDoListInfo> retrieveLists(int UserID) 
{ 
//Integrate userid specification later - need to add listUser table first 
IQueryable<ToDoListInfo> lists = 
    from l in db.ToDoLists 
    select new ToDoListInfo { 
     ListID = l.ListID, 
     ListName = l.ListName, 
     Order = l.Order, 
     Completed = l.Completed 
    }; 

    return lists.ToList<ToDoListInfo>; 
}  

Dostaję błąd mówiąc, co następuje:

cannont konwersji grupy metody 'ToList' do pozbawionego delegata typu 'System.Collections.Generic.List' Czy zamierzasz wywołać metodę?

+1

wskazówką było "Czy zamierza wywołać metodę?" –

Odpowiedz

27

Wystarczy nawiasów:

lists.ToList<ToDoListInfo>();

Ponadto, nie trzeba zadeklarować parametr typu, czyli można użyć następujących i niech typu systemu wywnioskować parametr typu:

lists.ToList();

+1

Deklaracja parametru nazwa typu może być tutaj naprawdę niepoprawna, ponieważ musisz dopasować parametr type do 'list'' IEnumerable 'implementacji, co może spowodować błąd podczas kompilacji; lepiej pozwolić [typ-wnioskowanie] (http://geekswithblogs.net/sdorman/archive/2007/04/06/111034.aspx) zrobić to zadanie – casperOne

+0

Co zrobić, jeśli chcę przekonwertować kolekcję iqueryble na inny typ listy ? Na przykład załóżmy, że mam dwie klasy A i B z prawie podobnym podpisem. Teraz pobieram dane z A i chcę utworzyć listę typu B, jak mogę to zrobić? –

4

Jesteś po prostu brakuje nawiasów zamykających na ToList, powinno być:

ToList(); 

lub

ToList<ToDoListInfo>(); 
Powiązane problemy