asp.net-mvc-3 – 方法“OrderBy”必须在方法“跳过”异常之前调用
发布时间:2020-12-30 14:56:00 所属栏目:asp.Net 来源:互联网
导读:我试图使用MvcjQgrid实现jQgrid,我得到这个异常. System.NotSupportedException was unhandled by user code Message=The method Skip is only supported for sorted input in LINQ to Entities. The method OrderBy must be
|
我试图使用MvcjQgrid实现jQgrid,我得到这个异常. System.NotSupportedException was unhandled by user code Message=The method 'Skip' is only supported for sorted input in LINQ to Entities. The method 'OrderBy' must be called before the method 'Skip'. 虽然OrdeyBy在Skip方法之前使用为什么会生成异常?怎么解决? 我在控制器中遇到了异常: public ActionResult GridDataBasic(GridSettings gridSettings)
{
var jobdescription = sm.GetJobDescription(gridSettings);
var totalJobDescription = sm.CountJobDescription(gridSettings);
var jsonData = new
{
total = totalJobDescription / gridSettings.PageSize + 1,page = gridSettings.PageIndex,records = totalJobDescription,rows = (
from j in jobdescription
select new
{
id = j.JobDescriptionID,cell = new[]
{
j.JobDescriptionID.ToString(),j.JobTitle,j.JobType.JobTypeName,j.JobPriority.JobPriorityName,j.JobType.Rate.ToString(),j.CreationDate.ToShortDateString(),j.JobDeadline.ToShortDateString(),}
}).ToArray()
};
return Json(jsonData,JsonRequestBehavior.AllowGet);
}
GetJobDescription方法和CountJobDescription方法 public int CountJobDescription(GridSettings gridSettings)
{
var jobdescription = _dataContext.JobDescriptions.AsQueryable();
if (gridSettings.IsSearch)
{
jobdescription = gridSettings.Where.rules.Aggregate(jobdescription,FilterJobDescription);
}
return jobdescription.Count();
}
public IQueryable<JobDescription> GetJobDescription(GridSettings gridSettings)
{
var jobdescription = orderJobDescription(_dataContext.JobDescriptions.AsQueryable(),gridSettings.SortColumn,gridSettings.SortOrder);
if (gridSettings.IsSearch)
{
jobdescription = gridSettings.Where.rules.Aggregate(jobdescription,FilterJobDescription);
}
return jobdescription.Skip((gridSettings.PageIndex - 1) * gridSettings.PageSize).Take(gridSettings.PageSize);
}
最后FilterJobDescription和OrderJobDescription private static IQueryable<JobDescription> FilterJobDescription(IQueryable<JobDescription> jobdescriptions,Rule rule)
{
if (rule.field == "JobDescriptionID")
{
int result;
if (!int.TryParse(rule.data,out result))
return jobdescriptions;
return jobdescriptions.Where(j => j.JobDescriptionID == Convert.ToInt32(rule.data));
}
// Similar Statements
return jobdescriptions;
}
private IQueryable<JobDescription> orderJobDescription(IQueryable<JobDescription> jobdescriptions,string sortColumn,string sortOrder)
{
if (sortColumn == "JobDescriptionID")
return (sortOrder == "desc") ? jobdescriptions.OrderByDescending(j => j.JobDescriptionID) : jobdescriptions.OrderBy(j => j.JobDescriptionID);
return jobdescriptions;
}
解决方法异常意味着如果您应用“跳过”,则您总是需要排序输入,也就是在用户不点击列进行排序的情况下.我可以想象,在用户甚至可以点击列标题之前首次打开网格视图时,没有指定排序列.为了抓住这种情况,我建议在没有给出其他排序条件时定义一些你想要的默认排序,例如:switch (sortColumn)
{
case "JobDescriptionID":
return (sortOrder == "desc")
? jobdescriptions.OrderByDescending(j => j.JobDescriptionID)
: jobdescriptions.OrderBy(j => j.JobDescriptionID);
case "JobDescriptionTitle":
return (sortOrder == "desc")
? jobdescriptions.OrderByDescending(j => j.JobDescriptionTitle)
: jobdescriptions.OrderBy(j => j.JobDescriptionTitle);
// etc.
default:
return jobdescriptions.OrderBy(j => j.JobDescriptionID);
}
编辑 关于您的后续问题根据您的评论:您不能在LINQ to Entities查询中使用ToString().而下一个问题是您无法在查询中创建一个字符串数组.我建议从数据库中加载其原始类型的数据,然后将其转换为内存中的字符串(和字符串数组): rows = (from j in jobdescription
select new
{
JobDescriptionID = j.JobDescriptionID,JobTitle = j.JobTitle,JobTypeName = j.JobType.JobTypeName,JobPriorityName = j.JobPriority.JobPriorityName,Rate = j.JobType.Rate,CreationDate = j.CreationDate,JobDeadline = j.JobDeadline
})
.AsEnumerable() // DB query runs here,the rest is in memory
.Select(a => new
{
id = a.JobDescriptionID,cell = new[]
{
a.JobDescriptionID.ToString(),a.JobTitle,a.JobTypeName,a.JobPriorityName,a.Rate.ToString(),a.CreationDate.ToShortDateString(),a.JobDeadline.ToShortDateString()
}
})
.ToArray() (编辑:4S站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- asp.net-mvc – MVC应用程序调试错误:viewstate MAC的验证
- asp.net 文章分页显示实现代码
- ASP.Net:为什么我的按钮的点击/命令事件没有在转发器中绑定
- asp.net – 转发器控件中的单选按钮列表
- asp.net-mvc – 有条件地在webgrid中显示图像 – mvc 3
- asp.net ajax实现无刷新验证码
- asp.net-core – 如何使用ASP.NET注册OData 5
- asp.net-mvc – 从基本控制器继承LINQ-to-SQL数据上下文
- ASP.NET 程序中删除文件夹导致session失效问题的解决办法分
- asp.net – 如何访问Global.asax静态成员?
推荐文章
站长推荐
- asp.net – WebForms:MasterPages中的动态(或绝
- asp.net-mvc-3 – 方法“OrderBy”必须在方法“跳
- 从app_data中删除文件夹时如何防止asp.net重新编
- asp.net后台cs中的JSON格式变量在前台Js中调用方
- AJAX分页的代码(后台asp.net)
- asp.net文件上传解决方案(图片上传、单文件上传
- asp.net-mvc – mvc razor @helper可以返回非编码
- ASP.Net WebAPI与Ajax进行跨域数据交互时Cookies
- 如何设置特定于ASP.NET请求的log4net上下文属性?
- 如何在服务器端缓存ASP.NET自定义HttpHandler响应
热点阅读
