使用LINQ動態查詢庫

2021-04-21 10:10:54 字數 1929 閱讀 8473

【原文發表日期】 monday, january 07, 2008 11:02 pm

linq (語言級整合查詢)是vs 2008 和 .net 3.5中提供的乙個新特性。linq使得資料查詢的概念成為.net中的一等程式設計概念,允許你在你喜歡的程式語言中有效地表達查詢。

linq的乙個好處是,它允許你使用 vb 和 c#. 編寫類安全的查詢。這意味著,對你的**,你會得到對linq查詢的編譯時檢查,以及完整的intellisense和重構支援:

類安全的查詢可用於大多數的場景,但也有些情形,你需要能在執行時動態構建查詢的靈活性。例如,你也許要在應用中提供商業智慧型的介面,允許業務分析員使用者使用下拉框在資料之上構造和表達他們自己的自定義查詢/檢視。

按 慣例,這類動態查詢場景經常是通過把字串連線起來構建成動態sql查詢的方式來處理的。最近有幾個人通過電郵問我該如何使用linq來處理這類場景。下 面的貼子內容將描述如何使用linq開發團隊提供的「動態查詢庫(dynamic query library)」來動態地構建linq查詢。

vb 和c#的dynamicquery例程都包括了乙個輔助庫的原始碼實現,該輔助庫允許你使用接受字串引數(而不是類安全的語言運算子)的擴充套件方法來表示 linq查詢。你可以把c#或vb的dynamicquery庫的實現拷貝到你自己的專案中,然後在適當的地方根據使用者的輸入用它來動態地構建linq查 詢。

你可以將dynamicquery庫用於任何linq資料provider,這些provider包括linq to sql, linq to objects, linq to xml, linq to entities, linq to sharepoint, linq to terraserver等等。動態查詢庫不是使用語言級的運算子或類安全的 lambda 擴充套件方法來構建linq查詢,而是提供給你基於字串的擴充套件方法,你可以用這些方法來傳遞任何字串表示式。

例如,下面是用vb編寫的乙個標準的類安全linq to sql查詢,從 northwind 資料庫中獲取資料,然後在乙個asp.net gridview 控制項中做顯示:

使用linq dynamicquery庫,我可以將上面的查詢表示式重寫成:

注意,其中的條件式 where 子句和排序的 orderby 子句現在接受字串表示式,而不是**表示式。因為它們是後期繫結字串,我可以動態地構建它們。例如,我可以提供介面給業務分析員使用者,允許他們自己構建查詢(包括任意的條件子句)。

在上面的 vb 和 c# 動態查詢例程中還有一些html文件,詳細描述了如何使用動態查詢庫中的擴充套件方法。如果你想要更深入地使用這個輔助庫的話,這些文件絕對是值得一讀的:

你可以使用免費的visual web developer 2008 express版或者vs 2008開啟執行這些專案。

動態查詢庫簡單易用,在那些查詢是完全動態,你要提供介面給使用者,助他們構建這些動態查詢的場景下尤其有用。

在將來的貼子裡,我將對構建動態linq查詢做深入**,討論如何使用類安全的predicate方法來對你的**進行結構化(《c# 3.0 in a nutshell 》一書的作者joseph 和 ben albahari,對此有個很精彩的貼子,在 這裡)。

希望本文對你有所幫助,

scott

標籤:

asp.net,

visual studio,

.net,

linq

Linq 動態查詢庫

原文發表日期 monday,january 07,2008 11 02 pm linq 語言級整合查詢 是vs 2008 和 net 3.5中提供的乙個新特性。linq使得資料查詢的概念成為.net中的一等程式設計概念,允許你在你喜歡的程式語言中有效地表達查詢。linq的乙個好處是,它允許你使用 v...

Linq 動態查詢

最近在做專案中用到了linq to sql,在用的時候感覺很,寫的 也少 提高了開發的週期 但是在開發的過程中我們還是碰到很多的東西,由於是第一把linq用到專案中,原來是寫個小的demo 沒有過多的用到他的優點 看看我的文件目錄吧 第二 就可以寫查詢的 了 public partial class...

Linq 動態查詢

如果是傳統的應用程式開發,採取動態拼 sql字串的形式就可以解決了,但linq 是沒辦法間歇性判斷而拼接.首先ui上查詢條件的專案往往並不確定,如上圖目前有城市 訂單數目,將來可能有新的專案要增加,結果將導致 頻繁更改,對於這種情況無論是拼sql時代,還是如今的linq都不太容易應對,故而當有新的查...