我們有一個DX gridview在一個專門設計的視圖中呈現。我們傳遞一個預定義的ViewModel對象,其值從Linq-2-Entities查詢中填充。問題是在我們的回調函數中,在DevExpress網格執行任何過濾,排序和分頁之前,L2E查詢實際上是在數據庫上執行的。 IE:(簡化的例子,在實際情況下,我們選擇從幾個表,但仍然在一個單一的LINQ查詢數據)DevExpress MVC Gridview + LINQ
public ActionResult GridViewPartial(string myParameters)
{
var modelData = from s in db.myTable
select new { modelName = s.Name };
return PartialView("GridViewPartial", modelData);
}
在這種情況下,數據已被傳遞到前查看實際執行查詢。因此,它實際上從數據庫中選擇太多的數據,而gridview只顯示選定的頁面。
我們將如何修改查詢,使其只選擇用戶選擇的頁面數據? IE瀏覽器。在用戶選擇第2頁時,跳過10行並在L2E查詢中取10,而不是選擇100000行(如果表中有許多),然後應用過濾/排序/分頁,就像所描述的情況一樣?
您發佈的第一個URL http://www.devexpress.com/issue=Q333116包含一個示例項目,該項目似乎實際使用自己的邏輯來生成LINQ查詢以使用分頁/排序/過濾參數。是不是可以做一個「基本」linq查詢(IQueryable myLinqObject =從dbContext.myTable中的s),並讓gridview在數據庫端執行查詢之前自動追加這些參數?如果可能的話,我想避免實現我自己的邏輯 - 我假設BindToLINQ()函數附加了諸如Take,Skip等自身的操作。 – L2Eer
當然。當使用BindToLINQ方法(我提到的兩種方法)時,GridView本身執行相應的LINQ命令(Take,Skip等)。 即,不需要手動執行它。 只需使用您提供的代碼並通過SQL Server Profiler檢查所需的查詢。 – Mikhail