2009-08-10 5 views
13

Ich habe gerade LINQ gelernt und bin in meinem Testprojekt zu einem Newbie Roadblock gekommen. Kannst du mir erklären, was ich falsch mache?Wie konvertiert man ein IQueryable <T> in eine Liste <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>; 
}  

Ich erhalte eine Fehlermeldung, die folgenden:

Cannont Methodengruppe 'ToList' zu nicht-Delegattyp 'System.Collections.Generic.List' umwandeln Wollen Sie die Methode aufrufen?

+1

der Schlüssel war in "Haben Sie vor, die Methode aufzurufen?" –

Antwort

27

Sie müssen nur Klammern:

lists.ToList<ToDoListInfo>();

Auch Sie müssen nicht den Typ Parameter deklarieren, dh Sie können die folgenden und lassen Sie den Typ-System den Typ-Parameter ableiten, verwenden könnte:

lists.ToList();

+1

Das Deklarieren des type name -Parameters könnte tatsächlich eine * bad * -Ding sein, da Sie den Typparameter der 'lists '' IEnumerable 'Implementierung, die einen Kompilierungsfehler verursachen könnte, übereinstimmen müssen; besser zu lassen [type-inference] (http://geekswithblogs.net/sdorman/archive/2007/04/06/111034.aspx) es ist Aufgabe – casperOne

+0

Was ist, wenn ich die iqueryble Sammlung in eine andere Art von Liste konvertieren möchte ? Zum Beispiel nehmen wir an, ich habe zwei Klassen A und B mit fast ähnlicher Signatur. Jetzt erhalte ich Daten von A und möchte eine Liste von Typ B erstellen, wie kann ich das tun? –

4

Sie sind nur die schließenden Klammern auf ToList fehlt, sollte sein:

ToList(); 

oder

ToList<ToDoListInfo>();