我正在尝试对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>
时,似乎会发生此错误。这是这种情况,还是别的什么?
答案 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
方法将非通用列表转换为通用列表
这有用吗?