2011-02-10 70 views
27

estoy teniendo problemas para entender mi errorLINQ simple y el error de lista: WhereListIterator`1 [Tarea]' al tipo 'System.Collections.Generic.List`1 [Tarea]'

Método:

public List<Task> GetAllTasks() 
{ 
    var AllTasks = from t in tasks 
        where t.Status.ToString() == "Completed" || t.Status.ToString() == "Pending" 
        select t; 

    return (List<Task>)AllTasks; 
} 

código subyacente:

protected void Page_Load(object sender, EventArgs e) 
{ 
    TaskList tdl = (TaskList)Session["TodoList"]; 
    List<Task> AllTasks = tdl.GetAllTasks(); 
    string str = ""; 

    foreach (Task t in AllTasks) 
    { 
     str += t.ToString() + "<br />"; 
    } 

    LblTasks.Text = str; 

} 

Después añado una tarea (AddTask.aspx) vuelvo a dirigir a otra página para mostrar ellos, entonces me sale el error de ejecución:

No se puede convertir el objeto del tipo 'WhereListIterator 1[Task]' to type 'System.Collections.Generic.List 1 [Task]'.

¿Hay algún problema con mi LINQ? Me acabo de enterar ayer jeje.

Gracias.

Respuesta

53

Solo necesita un .ToList() directamente en la consulta o cuando la devuelve. Al igual que en

var AllTasks = (from t in tasks 
       where t.Status.ToString() == "Completed" || t.Status.ToString() == "Pending" 
       select t).ToList(); 

O

return AllTasks.ToList(); 
+0

Gracias mucho! Eso funciona. Veo el punto de ToList(), pero ¿cómo es que el elenco típico no funciona? –

+4

@Ken, los métodos de consulta de LINQ están diseñados para funcionar contra cualquier secuencia que implemente 'IEnumerable ', y se evalúan de forma diferida. La fuente que es una 'Lista ' no es relevante. Si desea colecciones concretas, han proporcionado métodos para respaldar eso, como 'ToArray(), ToList(), ToDictionary(),' etc. –

+0

¡Una solución tan simple, gracias! –

Cuestiones relacionadas