生成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()方法。
1 internal Query<T> Build<T>() 2 { 3 var sequence = BuildSequence(new BuildInfo((IBuildContext)null, Expression, new SelectQuery())); 4 5 &nbs