2011-02-10 15 views
27

mam problemy ze zrozumieniem mój błądProste LINQ i błędów Lista: WhereListIterator`1 [Zadanie]”wpisz 'System.Collections.Generic.List`1 [zadanie]'

Metoda:

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; 
} 

Code Behind:

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; 

} 

Po dodaniu zadania (AddTask.aspx) przekierować na inną stronę, aby je wyświetlić, a następnie pojawia się błąd środowiska wykonawczego:

Nie można rzutować obiektu typu "WhereListIterator 1[Task]' to type 'System.Collections.Generic.List 1 [zadanie]".

Czy coś jest nie tak z moim LINQ? Nauczyłem się wczoraj hehe.

Dzięki.

Odpowiedz

53

Po prostu potrzebujesz .ToList() bezpośrednio na kwerendzie lub po jej zwróceniu. Jak w

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

lub

return AllTasks.ToList(); 
+0

dziękuję! To działa. Widzę punkt ToList(), ale dlaczego typowy rzut nie działa? –

+4

@Ken, Metody kwerend LINQ są zaprojektowane do pracy przeciwko dowolnej sekwencji implementującej 'IEnumerable ' i są leniwie oceniane. Źródło będące "Listą " nie jest istotne. Jeśli chcesz mieć konkretne kolekcje, dostarczyły metody do ich obsługi, takie jak 'ToArray(), ToList(), ToDictionary(),' itd. –

+0

Takie proste rozwiązanie, dziękuję! –

Powiązane problemy