为什么我不能在Visio Masters集合上使用Linq查询?

时间:2009-07-29 02:56:10

标签: c# linq

我正在尝试对Visio Masters集合执行以下Linq查询:

List<string> allMasterNames = (from master in myStencil.Masters select master.NameU).ToList<string>

我收到以下错误:

  

无法找到实现   源类型的查询模式   'Microsoft.Office.Interop.Visio.Masters'。   找不到“选择”。考虑   明确指定的类型   范围变量'master'。

从查看时来看,当查询对象未实现IEnumerable<T>IQueryable<T>时,似乎会发生此错误。这是这种情况,还是别的什么?

4 个答案:

答案 0 :(得分:1)

是的,这是因为它不是IEnumerable<T>IQueryable<T>,并且它没有自己编写的自定义Select方法。

受欢迎的人相信你必须实现这些接口以获得LINQ支持,你只需要将它们编译成的方法。

这很好:

public class MyClass { 
  public MyClass Select<MyClass>(Func<MyClass, MyClass> func) { ... } 
}

var tmp = from m in new MyClass()
          select m;

当然.ToList()不会工作;)

在您解决问题时,请尝试使用Cast<T>()扩展方法,将其设为IEnumerable<T>并允许您LINQ到心中。

答案 1 :(得分:1)

如异常消息所示,请考虑明确指定范围变量'master'的类型。

from Visio.Master master in myStencil.Masters select master.NameU

答案 2 :(得分:0)

根据Reflector ...

public class MastersClass : IVMasters, Masters, EMasters_Event, IEnumerable
{
  // more
}

其他人都不是IEnumerable<T>。但是,IEnumerable很好,所以你可以为每个人。

答案 3 :(得分:0)

我无法尝试这段代码。

(from master in myStencil.Masters.Cast<Masters> select master.NameU).ToList<string>)

要点是使用Enumerable.Cast方法将非通用列表转换为通用列表 这有用吗?