当我们知道了Linq查询要用到的数据库信息之后。接下就是生成对应的表达式树。在前面的章节里面笔者就已经介绍过。生成表达式树是事实离不开IQueryable<T>接口。而处理表达式树离不开IQueryProvider接口。LinqToDB框架跟这俩个接口有关系的有三个类:Table<T>类、ExpressionQuery<T>类、ExpressionQueryImpl<T>类。其中最重要的是ExpressionQuery<T>类。他是Table<T>和ExpressionQueryImpl<T>类的父类。而本章就是围绕这三个类进行的。

IQueryable<T>接口和IQueryProvider接口


 ExpressionQuery<T>类是一个抽象类。他实现于IExpressionQuery接口。IExpressionQuery接口却同时继续了IQueryable<T>接口和IQueryProvider接口。所以ExpressionQuery<T>类实际上同时实现了俩个接口。而同时自己增加一个属性SqlText和一个跟IQueryable接口一样子的Expression属性。SqlText属性是用于获得当前表达式对应的SQL语句。这个属性显然在开发过程非常有用。而Expression属性是用于生成表达式树的。

public interface IExpressionQuery<out T> : IOrderedQueryable<T>, IQueryProvider
{ new Expression Expression { get; set; } string SqlText    { get; }
}

从前面的章节里面,我们可以知道实现IQueryable<T>接口和IQueryProvider接口的类有俩个部分的职责。一是帮助生成表达式树,二是用于Linq To SQL的数据源的入口。作者也相应的设计了俩个类。就是上面讲到的Table<T>和ExpressionQueryImpl<T>类。ExpressionQueryImpl<T>类用于前者,而Table<T>类用于后者。

我想了解如何学习

姓名:
手机:
留言: