为啥我不能对 Visio Masters 集合使用 Linq 查询?

Posted

技术标签:

【中文标题】为啥我不能对 Visio Masters 集合使用 Linq 查询?【英文标题】:Why can't I use a Linq query on a Visio Masters collection?为什么我不能对 Visio Masters 集合使用 Linq 查询? 【发布时间】:2009-07-29 02:56:10 【问题描述】:

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

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

我收到以下错误:

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

当查询的对象未实现IEnumerable&lt;T&gt;IQueryable&lt;T&gt; 时,似乎会发生此错误。是这里的情况,还是其他原因?

【问题讨论】:

【参考方案1】:

是的,那是因为它不是IEnumerable&lt;T&gt;IQueryable&lt;T&gt;,而且它没有编写自己的自定义Select方法。

与流行相反,相信您不必必须实现这些接口才能获得 LINQ 支持,您只需要将它们编译成的方法即可。

这很好:

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


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

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

当您解决问题时,请尝试使用 Cast&lt;T&gt;() 扩展方法,这将使其成为 IEnumerable&lt;T&gt; 并允许您对自己的内心内容进行 LINQ。

【讨论】:

我添加了答案,当我这样做的时候,你得到了你需要的东西:)【参考方案2】:

正如异常消息所暗示的,考虑明确指定范围变量“master”的类型。

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

【讨论】:

【参考方案3】:

根据Reflector...

public class MastersClass : IVMasters, Masters, EMasters_Event, IEnumerable

  // more

其他人都不是IEnumerable&lt;T&gt;。但是,好的 OL IEnumerable 就在那里,所以你可以为每个。

【讨论】:

【参考方案4】:

我无法尝试这段代码。

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

要点是使用Enumerable.Cast 方法,将非泛型列表转换为泛型列表。 这行得通吗?

【讨论】:

以上是关于为啥我不能对 Visio Masters 集合使用 Linq 查询?的主要内容,如果未能解决你的问题,请参考以下文章

visio2013怎么画UML组件,为啥我找不到?

最近运行visio,老是出现visio已停止工作?这是为啥啊,怎么解决?

为啥我的 Entity Framework Code First 代理集合为空,为啥我不能设置它?

boost::hana: 为啥我不能过滤一个集合?

最近运行visio,老是出现visio已停止工作?这是为啥啊,怎么解决?

为啥我不能在编译时将整数添加到泛型集合中,即使使用引用类型作为数字创建的泛型? [复制]