|
系列文章導(dǎo)航:
Linq To Sql進(jìn)階系列(二)M:M關(guān)系
Linq To Sql進(jìn)階系列(三)CUD和Log
Linq To Sql進(jìn)階系列(四)User Define Function篇
Linq To Sql進(jìn)階系列(五)Store Procedure篇
Linq To Sql進(jìn)階系列(六)用object的動(dòng)態(tài)查詢與保存log篇
Linq To Sql進(jìn)階系列(七)動(dòng)態(tài)查詢續(xù)及CLR與SQL在某些細(xì)節(jié)上的差別
User Define Function, 用戶自定義函數(shù),簡(jiǎn)稱UDF. 關(guān)于sql server中的udf,請(qǐng)大家參考http://msdn.microsoft.com/msdnmag/issues/03/11/DataPoints/一文。本文主要闡述,在Linq To Sql中,如何使用UDF.
1,UDF 簡(jiǎn)介
UDF可以分為兩中類型。一種為Scalar Valued Function,簡(jiǎn)稱為SVF,是返回值類型的UDF. 另一種為Table Valued Function 簡(jiǎn)稱為TVF,是返回一個(gè)table的UDF. 人們通常喜歡拿UDF和Store Procedure做比較。其實(shí),他們各有千秋。UDF最多只能返回一個(gè)RowSet,而Store Procedure可以是多個(gè)。Store Procedure支持CUD操作,而UDF不支持。但是UDF在sql 中支持內(nèi)聯(lián)查詢,這個(gè)又是Sprocs所不能及的。因此Linq To Sql 也支持UDF的內(nèi)聯(lián)查詢。
2,SVF
看下面這個(gè)例子。返回某個(gè)類別產(chǎn)品最小的單元價(jià)格。
















系列文章導(dǎo)航:
Linq To Sql進(jìn)階系列(二)M:M關(guān)系
Linq To Sql進(jìn)階系列(三)CUD和Log
Linq To Sql進(jìn)階系列(四)User Define Function篇
Linq To Sql進(jìn)階系列(五)Store Procedure篇
Linq To Sql進(jìn)階系列(六)用object的動(dòng)態(tài)查詢與保存log篇
Linq To Sql進(jìn)階系列(七)動(dòng)態(tài)查詢續(xù)及CLR與SQL在某些細(xì)節(jié)上的差別
在這里,筆者將帶著大家開始習(xí)慣用dbml來(lái)維護(hù)數(shù)據(jù)庫(kù)的映射,而不是code.在beta2發(fā)布后,有人很快就能發(fā)現(xiàn)mapping code無(wú)法編譯了。因?yàn)榻涌诟膭?dòng)了。好,回歸正題。
無(wú)論是UDF還是Sprocs都會(huì)被映射為Function. 而IsComposable="true"是UDF獨(dú)有的一個(gè)特性,是標(biāo)志UDF身份的,Linq用它來(lái)區(qū)別Sprocs和UDF。這個(gè)字段說(shuō)明,該函數(shù)是支持內(nèi)聯(lián)查詢的。Name則是其在數(shù)據(jù)庫(kù)中的名稱。再來(lái)看其生成的code.


System.Nullable<int> categoryID)





系列文章導(dǎo)航:
Linq To Sql進(jìn)階系列(二)M:M關(guān)系
Linq To Sql進(jìn)階系列(三)CUD和Log
Linq To Sql進(jìn)階系列(四)User Define Function篇
Linq To Sql進(jìn)階系列(五)Store Procedure篇
Linq To Sql進(jìn)階系列(六)用object的動(dòng)態(tài)查詢與保存log篇
Linq To Sql進(jìn)階系列(七)動(dòng)態(tài)查詢續(xù)及CLR與SQL在某些細(xì)節(jié)上的差別
3,系統(tǒng)函數(shù)的映射
目前為止,無(wú)論是OR designer還是SqlMetal均不支持對(duì)系統(tǒng)函數(shù)的映射。筆者也只是嘗試著,手工映射,并成功調(diào)用。我們拿Var函數(shù)舉例。Var是求方差。讓我們來(lái)模仿上面那個(gè)dbml來(lái)改寫自己的dbml。我們將要多money類型做求var值。并且希望能夠調(diào)用sql server提供的var函數(shù)。那就需要我們將映射的名稱改成var,并且改動(dòng)參數(shù)和返回值類型。其最后的dbml為:




系列文章導(dǎo)航:
Linq To Sql進(jìn)階系列(二)M:M關(guān)系
Linq To Sql進(jìn)階系列(三)CUD和Log
Linq To Sql進(jìn)階系列(四)User Define Function篇
Linq To Sql進(jìn)階系列(五)Store Procedure篇
Linq To Sql進(jìn)階系列(六)用object的動(dòng)態(tài)查詢與保存log篇
Linq To Sql進(jìn)階系列(七)動(dòng)態(tài)查詢續(xù)及CLR與SQL在某些細(xì)節(jié)上的差別
4 TVF
返回一個(gè)table 的UDF稱為TVF.看下面例子










it知識(shí)庫(kù):Linq To Sql進(jìn)階系列(四)User Define Function篇,轉(zhuǎn)載需保留來(lái)源!
鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。