生成SQL語句的功能可以算是LinqToDB框架的最后一步。從上一章中我們可以知道處理完表達式樹之后,相關(guān)生成SQL信息會被保存在一個叫SelectQuery類的實例。有了這個實例我們就可以生成對應(yīng)的SQL語句。想要了解這一步部分的功能就必須從三個方面入手。一、Linq To SQL的機制原理。二、如何生成SQL語句。三、設(shè)置映射結(jié)果。

生成映射表達式


對于Linq To SQL的機制原理在前面的章節(jié)里面已經(jīng)講過了。這里筆者提出來主要目標(biāo)是明確什么時候觸發(fā)。下面的代碼不是看前面的獲得Query<T>類實列,而是看后面的GetIEnumerable方法調(diào)用。

 ExpressionQuery<T>類:

IEnumerable<T> Execute(IDataContextInfo dataContextInfo, Expression expression)
{    return GetQuery(expression, true).GetIEnumerable(null, dataContextInfo, expression, Parameters);}

記得筆者前面幾個章節(jié)中講到最后都會去調(diào)用倆個方法分別是Query<T>類中的GetIEnumerable方法和GetElement方法。而這倆個方法都是Func類型。如下

public Func<QueryContext, IDataContextInfo, Expression, object[], object> GetElement;public Func<QueryContext, IDataContextInfo, Expression, object[], IEnumerable<T>> GetIEnumerable;

顯然很明顯在調(diào)用GetIEnumerable方法一定要知道哪一個方法賦給他了。好了,先暫停一下。讓我們?nèi)タ匆幌律弦徽轮泄P者講到Build<T>()方法有三個重要方法中的一個——BuildQuery()方法。

Android培訓(xùn),安卓培訓(xùn),手機開發(fā)培訓(xùn),移動開發(fā)培訓(xùn),云培訓(xùn)培訓(xùn)

 1 internal Query<T> Build<T>() 2 { 3      var sequence = BuildSequence(new BuildInfo((IBuildContext)null, Expression, new SelectQuery())); 4  5   &nbs