剛剛從Subsonic 2.2 ActiveRecord更新爲3.0.0.3。我試圖使用LINQ做一個分頁查找這樣的查詢(我的對象/表被稱爲「庫」):Subsonic 3.0.0.3使用Linq的SQL分頁
Repository.Find(item => item.DocumentTitle.Contains(searchTerm))
.OrderBy(i => i.DocumentTitle).Skip((currentPage - 1) * itemsPerPage)
.Take(itemsPerPage);
當我認爲通過使用SQL Server Profiler此查詢生成的SQL,沒有在SQL中分頁,所有的分頁都在C#中的內存中完成。現在,Subsonic查詢語言確實有一個很好的GetPaged過程,但是我認爲LINQ本應該這樣做。我在這裏錯過了什麼,或者這是LINQ的限制嗎?
我知道Repository.GetPaged()
函數,但沒有足夠的參數 - 我需要做一個動態排序,以及一個Find()
。
做了更多的研究。顯然,這是由於C#如何編譯linq表達式。編譯器必須在設計時知道聲明的內容。如果沒有,SubSonic「ExpressionVisitor」(這不是SubSonic獨有的)不能反映該語句,因爲它不再是單個「表達式」。 – Steve 2009-09-08 13:43:39
這裏有第三方庫可以讓你在多個步驟中構建你的linq語句,但是增加了更多的外部依賴項到你的項目中。 SubSonic實際上似乎已經具備了其中的一些功能,但目前我還不太瞭解,所以提出了一種方法來使用它們來實現這一點。 – Steve 2009-09-08 13:44:28