Простая ошибка LINQ и List: WhereListIterator`1 [Task] 'для ввода' System.Collections.Generic.List`1 [Task] ' - PullRequest
33 голосов
/ 10 февраля 2011

У меня проблемы с пониманием моей ошибки

Метод:

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

Код сзади:

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;

}

После добавления задачи (AddTask.aspx)Я перенаправляю на другую страницу, чтобы отобразить их, затем получаю ошибку времени выполнения:

Невозможно привести объект типа 'WhereListIterator 1[Task]' to type 'System.Collections.Generic.List 1 [Task]'.

Что-то не такмой LINQ?Я только вчера узнал, хе-хе.

Спасибо.

1 Ответ

62 голосов
/ 10 февраля 2011

Вам просто нужно .ToList() либо непосредственно в запросе, либо когда вы его возвращаете.Как в

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

или

return AllTasks.ToList();
...