Telerik的mention此功能的數據庫服務器上:尋呼與Telerik的MVC擴展網格
LINQ的基於表達式引擎用於推動網格運算(尋呼,排序,過濾和分組)到數據庫服務器
但是如何啓用它?這些例子都是IEnumerable的東西或其他。
Telerik的mention此功能的數據庫服務器上:尋呼與Telerik的MVC擴展網格
LINQ的基於表達式引擎用於推動網格運算(尋呼,排序,過濾和分組)到數據庫服務器
但是如何啓用它?這些例子都是IEnumerable的東西或其他。
這取決於你如何將數據發送到視圖。如果將linq查詢留作懶惰評估,那麼分頁將發生在數據庫上。但是,如果在數據層中執行了ToList()或其他枚舉操作,那麼您將錯過了所有數據,並且必須設置一些內容來手動分頁。
爲了更好的展現...
// In your initial page load
public ActionResult Index()
{
return View(new MyViewModel
{
// ... other view data
// set order or .Where for initial load, but don't use .ToList or enumerate
MyObjects = _db.MyObjects.OrderBy(m => m.Name)
// When this is passed into the grid, it will finalize the paging there
// and when the grid enumerates MyObjects, it will only pull the relevant
// items from the database.
});
}
如果您正在使用AJAX結合...
// In an ajax grid responder action
[GridAction]
public ActionResult AjaxGridAction()
{
// Assuming _db is a CodeFirst DbContext, GridModel will handle filtering,
// paging, and sorting in the database as linq applies those methods to the
// IQueryable _db.MyObjects
return View(new GridModel(_db.MyObjects));
}
如果您使用的是存儲庫模式(雖然的DbContext已經是一個真正的資源庫) ,然後讓它返回懶惰的對象:
public IEnumerable<T> GetMyObjects()
{
// Don't use ToList or enumerate them in your repository - that will
// pull all the data before the Telerik grid has filtered it.
return _db.MyObjects;
}
即使所有東西都繞過IEnumerable,wh現在是時候實際遍歷集合,具體類型(上例中的DbSet)將成爲實際處理該集合的方式。
如果您使用的是類似於AutoMapper的東西,請注意,在映射過程中意外拉出所有記錄非常容易。 AutoMapper 2有一個解決方案,用於投影數據庫而無需迭代,但目前還沒有文檔。我一直在使用this solution for that,直到有時間調查AutoMapper 2爲止。
_db.MyObjects.Project().To<MyObjectsViewModel>();
基本上包自動項目性質的,而不是做這樣的:
_db.MyObjects
.Select(o => new MyObjectsViewModel { // manually map properties, ewww });
對於服務器分頁/排序,您應該設置GridOperationMode.Server道具。
有使用的一個樣本:
Html.Telerik().Grid<PartnerUserViewModel>()
.Name("Grid").DataBinding(binding => binding.Ajax().OperationMode(GridOperationMode.Server).Select("GetUsers", "Partner")).Columns(columns =>
{
columns.Bound(o => o.Representer).Title("Representer");
});
.Sortable(sorting => sorting.OrderBy(sortOrder => sortOrder.Add(p => p.DateCreated).Descending()))
.Filterable()
.Pageable(pager => pager.Position(GridPagerPosition.Both).PageSize(5))
.Groupable()
謝謝你,所以我想,他們檢查了IEnumerable是否是IQueryable的被窩裏。解釋它。乾杯,皮特。 – 2011-10-18 08:25:03