如何在MVC中读取DataSourceRequest以进行过滤和排序

Sha*_*ram 1 c# asp.net asp.net-mvc asp.net-mvc-4 kendo-grid

我在我的asp.net mvc应用程序中使用了kendo grid MVC,在读取网格时我使用了这个模型

public ActionResult Read([DataSourceRequest] DataSourceRequest request, string sWorkPeriodId, string eWorkPeriodId, string personId)
Run Code Online (Sandbox Code Playgroud)

一般来说,我使用此代码执行我的查询并将数据返回到网格

var dataLists = fdata.ToDataSourceResult(request);
Run Code Online (Sandbox Code Playgroud)

fdata是:

var fdata = _session.Query<WfTask>();
Run Code Online (Sandbox Code Playgroud)

但在其他情况下像这样我没有可查询我必须从api服务获取数据并使用列表:

var profile = JsonConvert.DeserializeObject<IEnumerable<PersonDetailInfoViewModel>>(resultApi);

  var result=(from t in  flowData join personDetailInfoViewModel in profile on t.wfhistory.Actor.Id equals personDetailInfoViewModel.PersonId orderby  t.wfhistory.StepNo)
Run Code Online (Sandbox Code Playgroud)

所以第二个问题出了什么问题,第二个如果我没有过滤网格或者在脱离请求中排序我必须检索所有的配置文件数据并使用result.ToDataSourceResult(request); 这使我的查询变慢,因为配置文件上的数据超过18000,并且对于每个请求我必须得到它们但是如果我在请求对象中有过滤器和排序我可以读取更少的数据作为结果查询的速度增加.所以谁可以我解析DataSourceRequest的数据作为参数发送到api?

Joh*_*hnW 7

这个解决方案效果很好,更清晰,更简洁:

private List<Kendo.Mvc.FilterDescriptor> GetAllFilterDescriptors(DataSourceRequest request)
{
   var allFilterDescriptors = new List<Kendo.Mvc.FilterDescriptor>();
   RecurseFilterDescriptors(request.Filters, allFilterDescriptors);
   return allFilterDescriptors;
}

private void RecurseFilterDescriptors(IList<Kendo.Mvc.IFilterDescriptor> requestFilters, List<Kendo.Mvc.FilterDescriptor> allFilterDescriptors)
{
    foreach (var filterDescriptor in requestFilters)
    {
        if (filterDescriptor is Kendo.Mvc.FilterDescriptor)
        {
            allFilterDescriptors.Add((Kendo.Mvc.FilterDescriptor)filterDescriptor);
        }
        else if (filterDescriptor is Kendo.Mvc.CompositeFilterDescriptor)
        {
            RecurseFilterDescriptors(((Kendo.Mvc.CompositeFilterDescriptor)filterDescriptor).FilterDescriptors, allFilterDescriptors);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)