简单的 LINQ 和列表错误:WhereListIterator`1[Task]' to type 'System.Collections.Generic.List`1[Task]'

Posted

技术标签:

【中文标题】简单的 LINQ 和列表错误:WhereListIterator`1[Task]\' to type \'System.Collections.Generic.List`1[Task]\'【英文标题】: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 有问题吗?昨天刚学的呵呵。

谢谢。

【问题讨论】:

【参考方案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(),等。

以上是关于简单的 LINQ 和列表错误:WhereListIterator`1[Task]' to type 'System.Collections.Generic.List`1[Task]'的主要内容,如果未能解决你的问题,请参考以下文章

使用 Linq 从列表中获取所有匹配值的索引

Linq 列表列表到单个列表

LINQ To Objects - 加入空列表

排序列表,除了一个带有 LINQ 的条目,排在最后

unity的list列表操作(结合Linq整理的一些高级写法SortWhere等)

C# LINQ 在列表中查找重复项