0
私は剣道グリッドにスキップを使用して大きなデータを表示し、サーバーのページングとフィルタリングのためのソリューションを取りたいと考えています。サーバーのフィルタリング剣道グリッドでのメモリ不足例外
public ActionResult LoadStudents(int page, int pageSize, int take, bool? activeOnly)
{
var sorterCollection = KendoGridSorterCollection.BuildCollection(Request);
var filterCollection = KendoGridFilterCollection.BuildCollection(Request);
...
LogUI.Data.kiwiEntities en = new Data.kiwiEntities();
var result = en.Syslogds.Where(s => el.Contains(s.MsgHostAddress)
&& op.Contains(s.MsgCustom04.Trim()));
var filteredStudents = result.MultipleFilter(filterCollection.Filters);
int coun = filteredStudents.Count();
var pagedData = filteredStudents.OrderBy(t => t.MsgDateTime).Skip((page-1) * pageSize).Take(pageSize);
var pagedDataList = pagedData.ToList();
var jsonData = new { total = coun, pagedDataList };
return Json(jsonData, JsonRequestBehavior.AllowGet);
}
と私MultipleFilter方法は次のとおりです:私のコントローラおよび方法がある
public static IQueryable<T> MultipleFilter<T>(this IQueryable<T> data,
List<KendoGridFilter> filterExpressions)
{
if ((filterExpressions == null) || (filterExpressions.Count <= 0))
{
return data;
}
IQueryable<T> filteredquery = from item in data select item;
for (int i = 0; i < filterExpressions.Count; i++)
{
var index = i;
Func<T, bool> expression = item =>
{
var filter = filterExpressions[index];
var itemValue = item.GetType()
.GetProperty(filter.Field)
.GetValue(item, null);
if (itemValue == null)
{
return false;
}
var value = filter.Value;
switch (filter.Operator)
{
case "eq":
return itemValue.ToString() == value;
case "startswith":
return itemValue.ToString().StartsWith(value);
case "contains":
return itemValue.ToString().Contains(value);
case "endswith":
return itemValue.ToString().EndsWith(value);
}
return true;
};
filteredquery = filteredquery.Where(expression).AsQueryable();
}
return filteredquery;
}
すべてのものはOKですが、私は私の剣道グリッドにフィルタを使用するとき、私はfilteredStudents変数にメモリ例外のうちを持っています。
達成しようとしているフィルタはありますか? –
すべてのフィルタ。 itemvalue.tostring()== value – behzad
'ToDataSourceResult()'拡張メソッドを使用している場合、剣道はこれを自動的に行うことができます。あなたはそれを試しましたか? –