Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在MVC中读取DataSourceRequest进行筛选和排序_C#_Asp.net_Asp.net Mvc_Asp.net Mvc 4_Kendo Grid - Fatal编程技术网

C# 如何在MVC中读取DataSourceRequest进行筛选和排序

C# 如何在MVC中读取DataSourceRequest进行筛选和排序,c#,asp.net,asp.net-mvc,asp.net-mvc-4,kendo-grid,C#,Asp.net,Asp.net Mvc,Asp.net Mvc 4,Kendo Grid,我在我的asp.NETMVC应用程序中使用了剑道网格MVC,在阅读网格时,我使用了这个模型 public ActionResult Read([DataSourceRequest] DataSourceRequest request, string sWorkPeriodId, string eWorkPeriodId, string personId) 一般来说,我使用这段代码执行查询并将数据返回到网格 var dataLists = fdata.ToDataSourceResult(req

我在我的asp.NETMVC应用程序中使用了剑道网格MVC,在阅读网格时,我使用了这个模型

public ActionResult Read([DataSourceRequest] DataSourceRequest request, string sWorkPeriodId, string eWorkPeriodId, string personId)
一般来说,我使用这段代码执行查询并将数据返回到网格

var dataLists = fdata.ToDataSourceResult(request);
fdata是:

var fdata = _session.Query<WfTask>();
var fdata=\u session.Query();
但在其他类似的情况下,我没有可查询性,我必须从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)
var profile=JsonConvert.DeserializeObject(resultApi);
var result=(从t.wfhistory.Actor.Id上的配置文件中的t将PersonDetailInfo视图模型与t.wfhistory.StepNo上的PersonDetailInfo视图模型连接起来等于PersonDetailInfo视图模型.PersonId orderby t.wfhistory)
所以,第二个有什么问题,第二个如果我在detasource请求中没有网格过滤或排序,我必须检索所有概要文件数据并使用result.ToDataSourceResult(请求); 这使得我的查询速度变慢,因为概要文件上的数据超过18000个,对于每个请求,我都必须获取所有数据,但如果我在请求对象中进行了筛选和排序,我可以读取更少的数据,从而提高查询速度。那么,我可以将DataSourceRequest的数据作为参数发送给api吗?

我找到了答案 通过阅读如下请求:

foreach (var item in request.Filters)
                {
                    if (item is Kendo.Mvc.CompositeFilterDescriptor)
                    {
                        var result = Gatherfileds((Kendo.Mvc.CompositeFilterDescriptor) item);
                        foreach (var filterDescriptor in result)
                        {
                            listoffilters.Add(filterDescriptor);
                        }
                    }
                    if (item is Kendo.Mvc.FilterDescriptor)
                    {
                        var descriptor = (Kendo.Mvc.FilterDescriptor)item;
                        listoffilters.Add(descriptor);
                    }
                }
Gatherfileds是一种与Foreach完全相同的读取所有项的方法

 private List<FilterDescriptor> Gatherfileds(Kendo.Mvc.CompositeFilterDescriptor filteritem)
    if (item is Kendo.Mvc.CompositeFilterDescriptor)
                    {
                        var result = Gatherfileds((Kendo.Mvc.CompositeFilterDescriptor) item);
                        foreach (var filterDescriptor in result)
                        {
                            listoffilters.Add(filterDescriptor);
                        }
                    }
私有列表集合文件(Kendo.Mvc.CompositeFilterDescriptor filteritem)
if(项为Kendo.Mvc.CompositeFilterDescriptor)
{
var result=Gatherfileds((Kendo.Mvc.CompositeFilterDescriptor)项);
foreach(结果中的var filterDescriptor)
{
添加(filterDescriptor)过滤器列表;
}
}

此解决方案运行良好,更清晰、更简洁:

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);
        }
    }
}
私有列表GetAllFilterDescriptors(数据源请求)
{
var allfilterddescriptors=new List();
RecurseFilterDescriptor(request.Filters、AllFilterDescriptor);
返回所有FilterDescriptors;
}
私有void RecurseFilterDescriptor(IList requestFilters,列出所有FilterDescriptor)
{
foreach(requestFilters中的var filterDescriptor)
{
if(filterDescriptor是Kendo.Mvc.filterDescriptor)
{
添加((Kendo.Mvc.FilterDescriptor)FilterDescriptor);
}
else if(filterDescriptor是Kendo.Mvc.CompositeFilterDescriptor)
{
RecurseFilterDescriptor(((Kendo.Mvc.CompositeFilterDescriptor)filterDescriptor)、filterDescriptor、AllFilterDescriptor);
}
}
}

如果您不是在使用剑道过滤器描述器,而是在数据网格上方创建自定义过滤器,该怎么办?类似于Jira的搜索UI的工作方式。