简单的LINQ和List错误:WhereListIterator`1 [Task]'键入'System.Collections.Generic.List`1 [Task]'

Ken*_* Ma 35 linq asp.net code-behind

我无法理解我的错误

方法:

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;
}
Run Code Online (Sandbox Code Playgroud)

代码背后:

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;

}
Run Code Online (Sandbox Code Playgroud)

添加任务(AddTask.aspx)后,我重定向到另一个页面以显示它们,然后我得到运行时错误:

无法转换'WhereListIterator 1[Task]' to type 'System.Collections.Generic.List1 [Task]' 类型的对象.

我的LINQ有问题吗?我刚学会了嘿嘿.

谢谢.

Ant*_*ram 66

您只需要.ToList()直接在查询上或返回时.如在

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

要么

return AllTasks.ToList();
Run Code Online (Sandbox Code Playgroud)

  • @Ken,LINQ查询方法旨在对任何实现`IEnumerable <T>`的序列起作用,并且它们被懒惰地评估.源为"List <T>"的源是不相关的.如果你想要具体的集合,他们提供了支持它的方法,比如`ToArray(),ToList(),ToDictionary(),`等. (5认同)