【发布时间】:2011-11-06 09:54:51
【问题描述】:
可能真的很简单,所以请原谅我的无知...
据我所知,Where() 扩展方法有几种风格:
Enumerable.Where<TSource> Method (IEnumerable<TSource>, Func<TSource, Boolean>)
上述两个扩展都位于 System.Linq 命名空间中,所以我可以做 Where() 希望足以证明我已经导入了正确的命名空间 - 或者我需要另一个命名空间对于 IQueryable 扩展?
我知道IQueryable<T> 继承自IEnumerable<T>,但为什么我不能获得IQueryable<T> 扩展?
class Test
{
IQueryable<Test> SomeMethod(Func<T, bool> criteria)
{
return new List<Test> { new Test() }.AsQueryable().Where(criteria); // compiler error converting IEnumerable<T> to IQueryable<T>
}
}
如上所示,应该有一个可用的扩展方法返回 IQueryable?为什么会解析为 IEnumerable Extensions?
【问题讨论】:
-
请描述一下你真正想做的事情。您的代码甚至无法编译:扩展方法必须是静态的。您试图在非静态类中声明非静态扩展方法。
-
我的错误 - 我会纠正它,但答案很明显 - 我通过
Func<T, bool>强制 IEnumerable扩展,而我需要的当然是 Expression<T, bool>。现在,如果我停下来阅读我发布的所有这些可爱的链接......
标签: c# .net-4.0 extension-methods ienumerable iqueryable