首页 > 其他 > 详细

Linq 查询 与方法调用

时间:2016-08-27 11:20:55      阅读:80      评论:0      收藏:0      [点我收藏+]

 

通常,使用linq查询时需要一个实现IQueryable<T> 的查询对象

 public class DataA<T> : IQueryable<T> {....}

  

之后通过

 var q = from c in new DataA<int>() where c > 0 select new { a = c.ToString() };

  进行查询,使用IQueryProvider  收集用户输入的表达式进行处理。

但是查询本身实际上只关注查询对象上有无可用的 linqmethod(Select,Where.....).

如下,定义一个泛型对象

public class Data<T> {
        public Data<TResult> Select< TResult>(   Expression<Func<T, TResult>> selector) {
            return new Data<TResult>();
        }
        public Data<T> Where (  Expression<Func<T,bool>> f) {
            return this;
        }
    }

只要保证Data上拥有与linq方法相同的实例方法,(Select,Where...),

我们依然可以使用相同的 linq 语法进行查询:

var q = from c in new DataA<int>() where c > 0 select new { a = c.ToString() };

 结论: linq 查询语法与查询对象的类型无关,只会检查查询对象上有无名称、方法签名一致的方法(实例方法或扩展方法)。

IQueryable,IQueryProvider 在linq查询中不是必须的。

顺便说一下 ,个人认为, orm中最好不要使用IQueryable 这些,容易造成方法污染, 而且linq查询语法是固定的,无法扩展或限制。

Orm中最好直接使用 各种查询方法,更加灵活一些。

 

 

 

 

 

   

 

Linq 查询 与方法调用

原文:http://www.cnblogs.com/cerl/p/5812429.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!