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

生成映射表達(dá)式


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

 ExpressionQuery<T>類:

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

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

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

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

Android培訓(xùn),安卓培訓(xùn),手機(jī)開(kāi)發(fā)培訓(xùn),移動(dòng)開(kāi)發(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