當(dāng)我們知道了Linq查詢要用到的數(shù)據(jù)庫信息之后。接下就是生成對應(yīng)的表達(dá)式樹。在前面的章節(jié)里面筆者就已經(jīng)介紹過。生成表達(dá)式樹是事實離不開IQueryable<T>接口。而處理表達(dá)式樹離不開IQueryProvider接口。LinqToDB框架跟這倆個接口有關(guān)系的有三個類:Table<T>類、ExpressionQuery<T>類、ExpressionQueryImpl<T>類。其中最重要的是ExpressionQuery<T>類。他是Table<T>和ExpressionQueryImpl<T>類的父類。而本章就是圍繞這三個類進(jìn)行的。

IQueryable<T>接口和IQueryProvider接口


 ExpressionQuery<T>類是一個抽象類。他實現(xiàn)于IExpressionQuery接口。IExpressionQuery接口卻同時繼續(xù)了IQueryable<T>接口和IQueryProvider接口。所以ExpressionQuery<T>類實際上同時實現(xiàn)了倆個接口。而同時自己增加一個屬性SqlText和一個跟IQueryable接口一樣子的Expression屬性。SqlText屬性是用于獲得當(dāng)前表達(dá)式對應(yīng)的SQL語句。這個屬性顯然在開發(fā)過程非常有用。而Expression屬性是用于生成表達(dá)式樹的。

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

從前面的章節(jié)里面,我們可以知道實現(xiàn)IQueryable<T>接口和IQueryProvider接口的類有倆個部分的職責(zé)。一是幫助生成表達(dá)式樹,二是用于Linq To SQL的數(shù)據(jù)源的入口。作者也相應(yīng)的設(shè)計了倆個類。就是上面講到的Table<T>和ExpressionQueryImpl<T>類。ExpressionQueryImpl<T>類用于前者,而Table<T>類用于后者。

我想了解如何學(xué)習(xí)

姓名:
手機(jī):
留言: