專利名稱:利用語(yǔ)言集成查詢linq進(jìn)行查詢的方法
技術(shù)領(lǐng)域:
本發(fā)明涉及數(shù)據(jù)庫(kù)技術(shù),尤其涉及數(shù)據(jù)庫(kù)的查詢技術(shù)。
背景技術(shù):
. NET3. 5引入了一個(gè)新技術(shù),稱為語(yǔ)言集成查詢LINQ (LanguageIntegrated Query)。它是集成在.NET編程語(yǔ)言中的一種特性。LINQ能夠在編寫(xiě)程序時(shí)可以提供很好 的編譯時(shí)語(yǔ)法檢查、豐富的元數(shù)據(jù)、智能感知、靜態(tài)類型等強(qiáng)類型語(yǔ)言的好處;并且它同時(shí) 還使得查詢可以方便地對(duì)內(nèi)存中的信息進(jìn)行查詢而不僅僅只是外部數(shù)據(jù)源。LINQ的上述優(yōu)勢(shì)也可以給現(xiàn)有的傳統(tǒng)數(shù)據(jù)庫(kù)的查詢帶來(lái)方便。
發(fā)明內(nèi)容
本發(fā)明提供一種使用LINQ來(lái)查詢傳統(tǒng)數(shù)據(jù)庫(kù)的方法。根據(jù)本發(fā)明,提供一種利用語(yǔ)言集成查詢LINQ進(jìn)行查詢的方法,包括下述的步 驟創(chuàng)建對(duì)象關(guān)系映射器,該對(duì)象關(guān)系映射器關(guān)聯(lián)一數(shù)據(jù)庫(kù)以及一用戶交互界面;在用戶交互界面中定義一組抽象級(jí)別的查詢類,該對(duì)象關(guān)系映射器將該組抽象級(jí) 別的查詢類鏡像成對(duì)應(yīng)的對(duì)象類;該對(duì)象關(guān)系映射器將數(shù)據(jù)庫(kù)中的數(shù)據(jù)與鏡像成的對(duì)象類建立關(guān)聯(lián);用戶交互界面接收到查詢指令,該查詢指令包含抽象的查詢信息,對(duì)象關(guān)系映射 器將該查詢信息投射到該一組查詢類,確定該查詢信息與查詢類的匹配;根據(jù)查詢類查找對(duì)應(yīng)的對(duì)象類;根據(jù)對(duì)相類查找數(shù)據(jù)庫(kù)中關(guān)聯(lián)的數(shù)據(jù),將數(shù)據(jù)返回給用戶交互界面。該方法還包括在用戶交互界面中添加抽象級(jí)別的查詢過(guò)濾器;對(duì)象關(guān)系映射器將抽象級(jí)別的查詢過(guò)濾器映射成數(shù)據(jù)庫(kù)中的具體的查詢過(guò)濾 器;在用戶交互界面中接受對(duì)于抽象級(jí)別的查詢過(guò)濾器的查詢過(guò)濾指令;對(duì)象關(guān)系映射器將該查詢過(guò)濾指令映射成查詢信息,使用具體的查詢過(guò)濾器進(jìn)行 查詢。采用本發(fā)明的技術(shù)方案,利用語(yǔ)言集成查詢LINQ的功能,對(duì)用戶實(shí)現(xiàn)了抽象級(jí)別 上對(duì)傳統(tǒng)數(shù)據(jù)的查詢,用戶可以根據(jù)自己熟悉的方式(抽象意義上的方式)輸入查詢指令, 而不必按照數(shù)據(jù)庫(kù)的數(shù)據(jù)保存方式來(lái)輸入查詢指令,大大方便了用戶的使用,而在查詢效 果上是與傳統(tǒng)的方式一致的。
圖1揭示了根據(jù)本發(fā)明的利用語(yǔ)言集成查詢LINQ進(jìn)行查詢的方法的流程圖。
圖2揭示了根據(jù)本發(fā)明的利用語(yǔ)言集成查詢LINQ結(jié)合查詢過(guò)濾器進(jìn)行查詢的方 法的流程圖。
具體實(shí)施方式
根據(jù)本發(fā)明,提出一種利用語(yǔ)言集成查詢LINQ進(jìn)行查詢的方法,參考圖1所示,該 方法包括下述的步驟10.創(chuàng)建對(duì)象關(guān)系映射器,該對(duì)象關(guān)系映射器關(guān)聯(lián)一數(shù)據(jù)庫(kù)以及一用戶交互界面。20.在用戶交互界面中定義一組抽象級(jí)別的查詢類,該對(duì)象關(guān)系映射器將該組抽 象級(jí)別的查詢類鏡像成對(duì)應(yīng)的對(duì)象類。30.該對(duì)象關(guān)系映射器將數(shù)據(jù)庫(kù)中的數(shù)據(jù)與鏡像成的對(duì)象類建立關(guān)聯(lián)。40.用戶交互界面接收到查詢指令,該查詢指令包含抽象的查詢信息,對(duì)象關(guān)系映 射器將該查詢信息投射到所述的一組查詢類,確定該查詢信息與查詢類的匹配。50.根據(jù)查詢類查找對(duì)應(yīng)的對(duì)象類。60.根據(jù)對(duì)相類查找數(shù)據(jù)庫(kù)中關(guān)聯(lián)的數(shù)據(jù),將數(shù)據(jù)返回給用戶交互界面。在本發(fā)明所提出的利用語(yǔ)言集成查詢LINQ進(jìn)行查詢的方法中,還可以使用查詢 過(guò)濾器的功能。傳統(tǒng)的查詢過(guò)濾器設(shè)置在數(shù)據(jù)庫(kù)中,需要直接輸入符合數(shù)據(jù)庫(kù)的數(shù)據(jù)保存 標(biāo)準(zhǔn)的查詢信息,對(duì)于使用者來(lái)說(shuō)不是很方便,本發(fā)明利用LINQ在用戶交互界面中提供一 種抽象級(jí)別的查詢過(guò)濾器,以方便用戶使用。參考圖2所示,本發(fā)明還提供利用語(yǔ)言集成查詢LINQ結(jié)合查詢過(guò)濾器進(jìn)行查詢的 方法,該方法在上述圖1所揭示的方法的基礎(chǔ)上,還包括下述的步驟70.在用戶交互界面中添加抽象級(jí)別的查詢過(guò)濾器。80,對(duì)象關(guān)系映射器將抽象級(jí)別的查詢過(guò)濾器映射成數(shù)據(jù)庫(kù)中的具體的查詢過(guò)濾
ο90.在用戶交互界面中接受對(duì)于抽象級(jí)別的查詢過(guò)濾器的查詢過(guò)濾指令。100.對(duì)象關(guān)系映射器將該查詢過(guò)濾指令映射成查詢信息,使用具體的查詢過(guò)濾器 進(jìn)行查詢。下面介紹本發(fā)明的利用語(yǔ)言集成查詢LINQ進(jìn)行查詢、以及利用語(yǔ)言集成查詢 LINQ結(jié)合查詢過(guò)濾器進(jìn)行查詢的方法的一個(gè)具體實(shí)現(xiàn)。首先創(chuàng)建一個(gè)對(duì)象關(guān)系映射器,該對(duì)象關(guān)系映射器可以添加、創(chuàng)建、刪除和關(guān)聯(lián)數(shù) 據(jù)對(duì)象。在用戶交互界面中定義一組抽象級(jí)別的查詢類,對(duì)象關(guān)系映射器將該組抽象級(jí)別 的查詢類鏡像成對(duì)應(yīng)的對(duì)象類,對(duì)象關(guān)系映射器還將數(shù)據(jù)庫(kù)中的數(shù)據(jù)與鏡像成的對(duì)象類建 立關(guān)聯(lián)。于是,當(dāng)用戶在用戶交互界面上修改對(duì)象時(shí),對(duì)象關(guān)系映射器利用LINQ to SQL鏡 像這些對(duì)象的結(jié)構(gòu)的類。以后在準(zhǔn)備為數(shù)據(jù)對(duì)象編寫(xiě)LINQ查詢時(shí),這些類允許提供設(shè)計(jì)期 間的IntelliSense支持、強(qiáng)類型化和編譯期間的類型檢查。LINQ不需要明確定義如何執(zhí)行查詢,而允許在比較抽象的級(jí)別上定義查詢。只要 定義查詢要返回的內(nèi)容,.NET及其編譯器就會(huì)確定查詢?nèi)绾芜\(yùn)行的細(xì)節(jié)。LINQ的基本功能 位于新的System. Core, dll程序集中。利用LINQ對(duì)傳統(tǒng)數(shù)據(jù)庫(kù)的查詢的一個(gè)基本流程如下首先把LINQ命名空間添加到TOB頁(yè)面上,添加LINQ命名空間
<% ilmport Namespace = " system. Linq“ % >添加這個(gè)命名空間將允許頁(yè)面使用所有的LINQ基本功能。獲得GJobLib的簡(jiǎn)單 的查詢獲得泛型列表,并將此綁定到GridView控件上,使用LINQ后可以更加簡(jiǎn)單的進(jìn)行查 詢,值得注意的是這個(gè)LINQ查詢語(yǔ)句中利用了新語(yǔ)言關(guān)鍵字from和select。該查詢還定 義了一個(gè)新變量m。這個(gè)變量在查詢中以兩種方式使用。首先,在from語(yǔ)句中定義它,就 告訴LINQ讓m表示單個(gè)集合項(xiàng),在本例中就是GJobLib對(duì)象。在查詢中第二次使用m是在 select語(yǔ)句中。這就告訴LINQ輸出一個(gè)匹配m的結(jié)構(gòu)的投射。在本例中就表示LINQ創(chuàng)建 了一個(gè)匹配GJobLib對(duì)象結(jié)構(gòu)的投射。LINQ不僅可以投射整個(gè)表中的所有對(duì)象,還可以投射自己定義的新的投射,同時(shí)明確定義字段名稱,指定要在結(jié)果集中出現(xiàn)的對(duì)象。LINQ還可以使用order by語(yǔ)句對(duì)結(jié)果 進(jìn)行排序。與SQL—樣,也可以選擇按升序或降序?qū)Y(jié)果排序。LINQ語(yǔ)言極大地提高了代碼的可讀性和可理解性。LINQ允許簡(jiǎn)單地表示出查詢 的意圖,告訴編譯器希望代碼做什么,編譯器就會(huì)很好得去執(zhí)行。LINQ還可以使用熟悉的、類似SQL的where語(yǔ)法,添加查詢過(guò)濾器。采用本發(fā)明的技術(shù)方案,利用語(yǔ)言集成查詢LINQ的功能,對(duì)用戶實(shí)現(xiàn)了抽象級(jí)別 上對(duì)傳統(tǒng)數(shù)據(jù)的查詢,用戶可以根據(jù)自己熟悉的方式(抽象意義上的方式)輸入查詢指令, 而不必按照數(shù)據(jù)庫(kù)的數(shù)據(jù)保存方式來(lái)輸入查詢指令,大大方便了用戶的使用,而在查詢效 果上是與傳統(tǒng)的方式一致的。
權(quán)利要求
一種利用語(yǔ)言集成查詢LINQ進(jìn)行查詢的方法,其特征在于,該方法包括下述的步驟創(chuàng)建對(duì)象關(guān)系映射器,該對(duì)象關(guān)系映射器關(guān)聯(lián)一數(shù)據(jù)庫(kù)以及一用戶交互界面;在用戶交互界面中定義一組抽象級(jí)別的查詢類,該對(duì)象關(guān)系映射器將該組抽象級(jí)別的查詢類鏡像成對(duì)應(yīng)的對(duì)象類;該對(duì)象關(guān)系映射器將數(shù)據(jù)庫(kù)中的數(shù)據(jù)與鏡像成的對(duì)象類建立關(guān)聯(lián);用戶交互界面接收到查詢指令,該查詢指令包含抽象的查詢信息,對(duì)象關(guān)系映射器將該查詢信息投射到所述的一組查詢類,確定該查詢信息與查詢類的匹配;根據(jù)查詢類查找對(duì)應(yīng)的對(duì)象類;根據(jù)對(duì)相類查找數(shù)據(jù)庫(kù)中關(guān)聯(lián)的數(shù)據(jù),將所述數(shù)據(jù)返回給用戶交互界面。
2.如權(quán)利要求1所述的利用語(yǔ)言集成查詢LINQ進(jìn)行查詢的方法,其特征在于,還包括在用戶交互界面中添加抽象級(jí)別的查詢過(guò)濾器;對(duì)象關(guān)系映射器將抽象級(jí)別的查詢過(guò)濾器映射成數(shù)據(jù)庫(kù)中的具體的查詢過(guò)濾器;在用戶交互界面中接受對(duì)于抽象級(jí)別的查詢過(guò)濾器的查詢過(guò)濾指令;對(duì)象關(guān)系映射器將該查詢過(guò)濾指令映射成查詢信息,使用具體的查詢過(guò)濾器進(jìn)行查
全文摘要
本發(fā)明揭示了一種利用語(yǔ)言集成查詢LINQ進(jìn)行查詢的方法,包括創(chuàng)建對(duì)象關(guān)系映射器,該對(duì)象關(guān)系映射器關(guān)聯(lián)一數(shù)據(jù)庫(kù)以及一用戶交互界面;在用戶交互界面中定義一組抽象級(jí)別的查詢類,該對(duì)象關(guān)系映射器將該組抽象級(jí)別的查詢類鏡像成對(duì)應(yīng)的對(duì)象類;該對(duì)象關(guān)系映射器將數(shù)據(jù)庫(kù)中的數(shù)據(jù)與鏡像成的對(duì)象類建立關(guān)聯(lián);用戶交互界面接收到查詢指令,該查詢指令包含抽象的查詢信息,對(duì)象關(guān)系映射器將該查詢信息投射到該一組查詢類,確定該查詢信息與查詢類的匹配;根據(jù)查詢類查找對(duì)應(yīng)的對(duì)象類;根據(jù)對(duì)相類查找數(shù)據(jù)庫(kù)中關(guān)聯(lián)的數(shù)據(jù),將數(shù)據(jù)返回給用戶交互界面。
文檔編號(hào)G06F17/30GK101989274SQ20091005577
公開(kāi)日2011年3月23日 申請(qǐng)日期2009年7月31日 優(yōu)先權(quán)日2009年7月31日
發(fā)明者徐小進(jìn), 沙潔 申請(qǐng)人:上海杉達(dá)學(xué)院