为什么这个LINQ查询不起作用?

时间:2009-10-06 03:34:09

标签: c# winforms linq

我试图帮助其他人并撰写此查询:

var foundTab = (from tab in tabControl1.TabPages
                where tab.Name == "tabName"
                select tab).First();

他们报告说他们收到了这个错误:

  

无法找到实现   源类型的查询模式   System.Windows.Forms.TabControl.TabPageCollection”。   '哪里'找不到。明确考虑   指定范围的类型   变量'tab'。

我查看了MSDN,并TabPageCollection实施了IListICollectionIEnumerable。那么,这里发生了什么?该错误意味着什么,是否有另一种方法来查询Tab Control的TabPages属性?

4 个答案:

答案 0 :(得分:8)

试试这个:

var tab = (from System.Windows.Forms.TabPage tab in tabControl1.TabPages
           where tab.Name == "tabName"
           select tab).First();

此代码指定范围变量的类型。

答案 1 :(得分:4)

TabPageCollection实现IEnumerable但不是IEnumerable<T>,这是LINQ使用的。要修复,请使用类似的强制转换方法:

var foundTab = (from tab in tabControl1.TabPages.Cast<TabPage>()
            where tab.Name == "tabName"
            select tab).First();

答案 2 :(得分:2)

但是,但是......?如果你有名字,你可以直接引用它吗?的TabPages [ “TABNAME”]

答案 3 :(得分:0)

试试这个:

var tab = tabControl1.TabPages.FirstOrDefault(t => t.Name == "tabName");

另外,请确保您有

using System.Linq;

位于文件顶部。

迪伦