当我使用jQuery对话框和实体框架开发CRUD操作的基本Employee应用程序时,我在调试时遇到两种类型的错误,当我构建解决方案时,我知道它们彼此链接但是我我无法弄清楚
构建时出现错误1:
方法的类型参数' System.Linq.Enumerable.OrderBy(System.Collections.Generic.IEnumerable,System.Func)'无法从使用中推断出来。尝试明确指定类型参数
此代码(在Model类中):
public IEnumerable<tblEmployee> GetEmployeePage(int pageNumber, int pageSize, string searchCriteria)
{
if (pageNumber < 1)
pageNumber = 1;
return testEmp.tblEmployees
.OrderBy(searchCriteria) //I am getting error here//
.Skip((pageNumber - 1) * pageSize)
.Take(pageSize)
.ToList();
}
调试时出现错误2:
System.ArgumentNullException:值不能为空。
以下代码(在视图中):
@model Emp_Mvc_Application.Models.PagedEmployeeModel
@{
ViewBag.Title = "Index";
Layout = "~/Views/Shared/_Layout.cshtml";
WebGrid grid = new WebGrid(rowsPerPage: Model.PageSize);
grid.Bind(Model.TblEmp, autoSortAndPage: false, rowCount: Model.TotalRows);
}
答案 0 :(得分:2)
您的搜索条件必须是lambda表达式,例如
OrderBy(e => e.EmployeeID)
而不是string
尝试这个
public IEnumerable<tblEmployee> GetEmployeePage(int pageNumber, int pageSize, Func<tblEmployee, object> searchCriteria)
{
if (pageNumber < 1)
pageNumber = 1;
return testEmp.tblEmployees
.OrderBy(searchCriteria)
.Skip((pageNumber - 1) * pageSize)
.Take(pageSize)
.ToList();
}
这样称呼:
var result = GetEmployeePage(1, 10, e => e.EmployeeId)
答案 1 :(得分:0)
看起来你正在传递一个字符串作为你的orderby标准 - 该方法期待一个委托。这似乎是一个误导性的错误,但我相信这是你的问题。
例如:
.OrderBy(e => e.LastName)
如果您需要能够按字符串标准排序,您可能希望在此处查看 - How do I apply OrderBy on an IQueryable using a string column name within a generic extension method?