【问题标题】:Sort a TreeView alphabetically using linq使用 linq 按字母顺序对 TreeView 进行排序
【发布时间】:2013-11-29 20:47:04
【问题描述】:

我是 LINQ 的新手,如果这是一个愚蠢的问题,请原谅我,但从我开始了解 LINQ 的情况来看,我相信我应该能够做到以下几点。 我想在 TreeView 中获取一组节点(在任何级别)并按字母顺序对其兄弟姐妹进行排序。

认为我可以做到以下几点:

//node is already selected
TreeNode parent = node.Parent;
TreeNodeCollection siblingNodes = node.Parent.Nodes;
siblingNodes = siblingNodes.OrderBy(x => x.Text);

因为TreeNodeCollection 实现了IEnumerable。但是编译器告诉我

System.Windows.Forms.TreeNodeCollection 不包含定义 对于 OrderBy 并且没有扩展方法 OrderBy 接受第一个参数 可以找到 System.Windows.Forms.TreeNodeCollection 类型的(是 您缺少 using 指令或程序集引用?)

(我使用的是System.Linq

那我误会了什么?

【问题讨论】:

    标签: c# .net linq sorting treeview


    【解决方案1】:

    您是否缺少对 LINQ 的引用?

    using System.Linq;
    

    更新:

    您需要定义TreeViewNodeSorter 才能对节点进行排序。这篇文章将为您指明正确的方向:Sorting nodes of a TreeView

    【讨论】:

    • 不,我正在使用 System.Linq(这在我原来的问题中,但另一个用户将那句话编辑掉了......)
    • 但是,这正是编译器告诉你的。
    • 不,来自 Linq 的其他扩展方法出现在智能感知中,所以 Linq 就在那里。我可以注释掉我的代码并创建一个虚拟数组并对其执行 Linq OrderBy 操作。在这个 TreeNodeCollection 案例中,它只是不喜欢 OrderBy。
    【解决方案2】:

    基于 MSDN:

    http://msdn.microsoft.com/en-us/library/system.linq(v=vs.100).aspx

    IEnumerable 的 System.Linq 扩展未定义 OrderBy。它为 IEnumerable 定义了 OrderBy。

    EnumerableQuery ClassEnumerableQuery<T> Class

    【讨论】:

    • 那么是不是我不能在 TreeNodeCollection 上执行 Linq 订单?
    • 您不能直接在 TreeNodeCollection 上执行 Linq。您可以将其更改为 List 或 IEnumerable 然后执行 linq.
    猜你喜欢
    • 1970-01-01
    • 2011-08-29
    • 2017-05-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多