首页 新闻 会员 周边

Linq从本质上是调用了哪个函数?

0
[已解决问题] 解决于 2010-03-16 22:37

如果查询对象是 IQueryable 的话

var q = from a in Article

            where a.id == 1

            select a;

 

从本质上它是不是就相当于??

Article.Where(a=>a.id==1);

 

那我自己给 IQueryable写了一个扩展方法(重载了Where)

那么怎么在Linq中使用呢?

 

 

微软官方有个动态查询的例子,它上面可以使用 Where("a.id==1")  来查询

但是却不能在Linq中使用

 

 

有什么办法能在Linq中使用自己重载的函数呢?

Dozer的主页 Dozer | 初学一级 | 园豆:30
提问于:2010-03-15 16:38
< >
分享
最佳答案
0

首先,LINQ本质上调用的是ADO.NET,查询语句使用的是DataReader,这是LINQ的本质,调用Where扩展方法(即查询操作符)是“现象”,不是“本质”,呵呵。

其次,关于能否使用自定义的查询操作符,回答是肯定的。这时你不能再引用System.Linq这个程序集,而需要引用你自定义查询操作符所在的程序集。但是,你必须自定义全部在linq语句中使用的查询表达式所对应的查询操作符。例如你的linq语句:from a in Article where a.id == 1 select a; ,这里用到了where和select,那么你自定义的查询操作符必须包含Where和Select(注意:方法签名必须相同),但如果你只定义了这两个操作符,那么orderby、group等表达式就无法使用了,因为你需要为所有的表达式提供自定义的扩展方法。

关于LINQ,推荐你看看《LINQ实战

麒麟.NET | 老鸟四级 |园豆:3614 | 2010-03-16 10:28
其他回答(2)
0

你猜测的是正确的,但是你自己写的方法是不可能从语言的角度给予你支持的

另外,LINQ并不仅仅是form xxx的语法

Gray Zhang | 园豆:17610 (专家六级) | 2010-03-15 19:54
0
xiaoxiao123 | 园豆:210 (菜鸟二级) | 2010-03-16 11:05
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册