2009-08-10 21 views
13

Aprendiendo LINQ y he llegado a un control de carretera novato en mi proyecto de prueba. ¿Puedes explicarme qué estoy haciendo mal?Cómo convertir IQueryable <T> a una lista <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>; 
}  

Recibo un error que dice lo siguiente:

cannont convertir método de grupo 'ToList' a no delegado tipo 'System.Collections.Generic.List' ¿Tiene intención de invocar el método?

+1

la clave estaba en "¿Tiene la intención de invocar el método?" –

Respuesta

27

Sólo necesita parantheses:

lists.ToList<ToDoListInfo>();

También, usted no tiene que declarar el parámetro de tipo, es decir, se puede utilizar la siguiente y dejar que el tipo de sistema de inferir el parámetro de tipo:

lists.ToList();

+1

Declarar el parámetro de nombre de tipo en realidad podría ser una mala cosa * * aquí, como usted tiene que coincidir con el parámetro tipo de '' lists' IEnumerable 'aplicación, lo que podría causar un error en tiempo de compilación; mejor dejar que [tipo de inferencia] (http://geekswithblogs.net/sdorman/archive/2007/04/06/111034.aspx) hacer su trabajo – casperOne

+0

Qué pasa si quiero convertir la colección iqueryble a un tipo diferente de la lista ? Por ejemplo, supongamos que tengo dos clases A y B con una firma casi similar. Ahora recupero datos de A & quiero hacer una lista de tipo B, ¿cómo puedo hacer eso? –

4

Usted se acaba perdiendo los soportes de cierre en ToList, debe ser:

ToList(); 

o

ToList<ToDoListInfo>(); 
Cuestiones relacionadas