2009-11-25 50 views
1

我嘗試了一些使用LINQ動態查詢的方法 - LINQKit和 LINQ動態查詢庫。我不喜歡第二個,因爲它會殺死LINQ的想法 - 能夠在編譯時檢查查詢。而對於LINQKit,我沒有爲我的場景找到一個好例子。我也不喜歡過度使用反射。LINQ和帶有分頁和LINQ2SQL的動態查詢

我的場景如下。我有一個正在做業務邏輯和DAL邏輯的Web服務。 webforms應用程序是分開的。我有一些網頁帶有用戶想要過濾的每個字段的複選框,還有一個用於輸入每個過濾器值的文本框。我的web服務有一個方法GetByFilter,我通過一些List。 QueryObject是一個包含字符串:filedName,object:fieldValue的類。

然後我的webservice接收查詢對象列表,現在出現了一個大問題:如果字段數和過濾器值可能會有所不同,如何將其轉換爲LINQ查詢?

更糟的是 - 我不使用LINQ2SQL,但我用倉庫一些自定義DAL如果需要的話可以返回IQUERY(像這樣的: http://msdn.microsoft.com/en-us/magazine/dd569757.aspx 滾動到庫)。

我知道我可以使用尋呼與LINQ2SQL: VAR PagedData = query.Skip((iPageNum - 1)* iPageSize)。取(iPageSize);

那麼我怎麼能從LINQ到我的底層DAL實現中獲得動態查詢參數(以及iPageNum和iPageSize),以便以特定數據提供者的方式執行這些查詢?也許我必須實現我的DAL作爲一些LINQ數據提供者(我不知道該怎麼做)?

問題是 - 我不想依賴於LINQ2SQL(然後我可以將我的Repositories作爲LINQ2SQL的包裝器來實現),但是同時我想在我的DAL外部的任何地方都有LINQ查詢功能。可能嗎?

回答

0

這當然是可能的,你要找什麼是創建自己的IQueryable,「自定義LINQ提供程序」

這裏的MSDN文章:http://msdn.microsoft.com/en-us/library/bb546158.aspx 和馬特·沃倫的有上有一個博客系列:http://blogs.msdn.com/mattwar/archive/2007/07/30/linq-building-an-iqueryable-provider-part-i.aspx

我建議從它開始看看它有多難,它是否值得你!

如果你決定反對它,有這個博客帖子的讀:http://www.hanselman.com/blog/RealWorldAppsInDaysNotWeeks.aspx ,看看是否ADO.Net數據服務(道夫)是任何使用您

+0

感謝的,事實證明,自定義數據提供者不像我想的那麼複雜。 – JustAMartin 2009-11-26 11:42:47