为啥我不能对 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<T>
或IQueryable<T>
时,似乎会发生此错误。是这里的情况,还是其他原因?
【问题讨论】:
【参考方案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。
【讨论】:
我添加了答案,当我这样做的时候,你得到了你需要的东西:)【参考方案2】:正如异常消息所暗示的,考虑明确指定范围变量“master”的类型。
from Visio.Master master in myStencil.Masters select master.NameU
【讨论】:
【参考方案3】:根据Reflector...
public class MastersClass : IVMasters, Masters, EMasters_Event, IEnumerable
// more
其他人都不是IEnumerable<T>
。但是,好的 OL IEnumerable 就在那里,所以你可以为每个。
【讨论】:
【参考方案4】:我无法尝试这段代码。
(from master in myStencil.Masters.Cast<Masters> select master.NameU).ToList<string>)
要点是使用Enumerable.Cast
方法,将非泛型列表转换为泛型列表。
这行得通吗?
【讨论】:
以上是关于为啥我不能对 Visio Masters 集合使用 Linq 查询?的主要内容,如果未能解决你的问题,请参考以下文章
最近运行visio,老是出现visio已停止工作?这是为啥啊,怎么解决?
为啥我的 Entity Framework Code First 代理集合为空,为啥我不能设置它?