Dynamic LINQ 讓 LINQ 的世界變的更美好

分享到噗浪!

身為一個程式設計師最討厭的就是被侷限在框框裡寫程式,我們唯一的限制應該是在我們的創意而非架構。像 LINQ 剛出來的時候我覺得超級好用,不過等用在專案上實做的時候才發現綁手綁腳的,想要動態組成一個 LINQ 語法難上加難,結果過沒多久就在 ScottGu's Blog 看到一篇 Dynamic LINQ (Part 1: Using the LINQ Dynamic Query Library),看到的時候好像挖到寶一樣,以前在開發時卡住的問題全部都解決了,從今年 2 月份用到現在簡直是幾乎忘了它的存在,以致於這幾個月都沒有提及 Dynamic LINQ 這個好東西,直接上週一個朋友問我:『LINQ 的 Where 條件可以像以前組 SQL Command 一樣動態組裝嗎?』,我馬上跟他說有 Dynamic LINQ 這個東西,不用多說,他跟我剛看到 Dynamic LINQ 的時候一樣覺得:Bravo! ( 太棒了 )

這個 Dynamic LINQ 其實也跟我曾經介紹過的 好用的 Linq Samples and the Sample Query Explorer 一樣,早就出現在 VS2008 的 CSharpSample 裡面了,有需要的人可以到這裡下載,下載回來後這個 Library 放在 \LinqSamples\DynamicQuery\ 專案裡,專案裡面有個 Dynamic.cs 是一堆 Extension Methods,用來擴充 LINQ 的現有功能,程式碼有點複雜,想專精 LINQ 的人可以好好研究一下這些原始碼,共有 2,027 行。如果沒空看也沒關係,會用就很夠了,你可以看專案內的 Program.cs 提供一些簡單的範例,不用多說,看個範例你就知道他在做什麼了:

Northwind db = new Northwind(connString); 
db.Log = Console.Out;

var query =
    db.Customers.Where("City == @0 and Orders.Count >= @1", "London", 10).
    OrderBy("CompanyName").
    Select("New(CompanyName as Name, Phone)");

Console.WriteLine(query);
Console.ReadLine();

我介紹到這裡就好,大家如果有感覺的話,可以到 Dynamic LINQ (Part 1: Using the LINQ Dynamic Query Library)动态LINQ (第一部分:使用LINQ动态查询库) 查看更完整的範例,或者可以用搜尋引擎查詢 Dynamic LINQ 也可以找到一堆資料。

不過,使用 Dynamic LINQ 有個缺點,就是這種寫法就會失去編譯時期偵錯(Compile-time Debugging)的機會,如果你自己組成的 LINQ 語法有問題的話,就必須要到執行時期(Runtime)才有可能找到錯誤了,這時你就必須要做好錯誤處理(Error Handling)才行!

  

此文章由 will 發表於 2008/6/23 下午 05:17:02

永久連結 | 評論 (2) | 此文章的RSSRSS comment feed |

分類: .Net | C# | LINQ

標籤: ,

評論

一月 3. 2009 22:05

alan

保哥您好:
求救!求救!
您精闢的說明真的有讓人挖到寶的感覺!
照著範例將DynamicLinq.cs放入網站目錄App_Code底下,一切的測試完全無誤。
可是問題來了!
情境如下:
新增專案時
建一個網站project和建一個ASP.NET Server Control
資料層和商業邏輯層都放ASP.NET Server Control內
當我想把DynamicLinq.cs放入ASP.NET Server Control內
編輯會報錯,請問有解嗎?

alan 台灣

一月 8. 2009 21:20

will

DynamicLinq.cs 是一組 Extension Methods 耶,你放在 Control 怎麼可以呢?請放到 App_Code 目錄下。

will 台灣

新增評論


( 您輸入的Email不會顯示於網站上 )

  Country flag

biuquote
  • 評論
  • 線上預覽
Loading