【问题标题】:Simple LINQ and List error: WhereListIterator`1[Task]' to type 'System.Collections.Generic.List`1[Task]'简单的 LINQ 和列表错误:WhereListIterator`1[Task]' to type 'System.Collections.Generic.List`1[Task]'
【发布时间】:2011-06-24 15:15:23
【问题描述】:

我无法理解我的错误

方法:

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)后,我重定向到另一个页面以显示它们,然后我收到运行时错误:

无法转换类型为“WhereListIterator1[Task]' to type 'System.Collections.Generic.List1[Task]”的对象。

我的 LINQ 有问题吗?昨天刚学的呵呵。

谢谢。

【问题讨论】:

    标签: asp.net linq code-behind


    【解决方案1】:

    您只需要一个.ToList() 直接在查询中或在您返回它时。如

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

    或者

    return AllTasks.ToList();
    

    【讨论】:

    • 非常感谢!这样可行。我明白了 ToList() 的意义,但是为什么典型的演员阵容不起作用?
    • @Ken,LINQ 查询方法旨在针对实现IEnumerable&lt;T&gt; 的任何序列工作,并且它们被延迟评估。 List&lt;T&gt; 的来源不相关。如果你想要具体的集合,他们已经提供了支持的方法,例如ToArray(), ToList(), ToDictionary(),等。
    猜你喜欢
    • 1970-01-01
    • 2019-04-05
    • 1970-01-01
    • 2019-07-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多