我正在使用MVC4,Entityframewor和Jqgrid,当我从数据库中获取数据时,我坚持这个错误。你们中的很多人说将id字段填充到另一个var中,但是我没有得到准确写入它的地方,而我的数据库中的Id字段为Integer。所以请帮帮我。 u.Id是我从EF访问的Id字段,显示此错误。什么是替代方式,以及放置新代码的位置。 我的控制器看起来像
public JsonResult GetUserDetails(string sidx="Id", string sord="asc", int page=1, int rows=5)
{
int pageIndex = Convert.ToInt32(page) - 1;
int pageSize = rows;
int totalRecords = db.Users.Count();
int totalPages = (int)Math.Ceiling((float)totalRecords / (float)pageSize);
var userdata = db.Users.OrderBy(sidx + " " + sord).Skip(pageIndex * pageSize).Take(pageSize);
var jsonData = new
{
total = totalPages,
page,
records = totalRecords,
rows = (from u in userdata
select new
{
i = u.Id,
cell = new string[]{**u.Id.ToString()**, u.Name,u.Designation,u.City}
//cell = new string[] { "", "", "", "" }
}).ToArray()
};
return Json(jsonData);
}
我从过去的一天开始工作,并没有从中得到解脱。
答案 0 :(得分:1)
方法ToString()无法转换为SQL查询。所以你有几个选择:
您可以从db获取完整实体userdata并将其映射到.net代码中的字符串数组:
var userdata = db.Users.OrderBy(sidx + " " + sord).Skip(pageIndex * pageSize).Take(pageSize).AsEnumerable();
var jsonData = new
{
total = totalPages,
page,
records = totalRecords,
rows = (
from u in userdata
select new
{
i = u.Id,
cell = new string[]{**u.Id.ToString()**, u.Name,u.Designation,u.City}
//cell = new string[] { "", "", "", "" }
}).ToArray()
};
2.您可以使用两个Select()
,首先从db获取数据,然后将其映射到您的字符串数组:
var userdata = db.Users.OrderBy(sidx + " " + sord).Skip(pageIndex * pageSize).Take(pageSize).Select(u=>new{u.Id, u.Name, u.Designation, u.City});
var jsonData = new
{
total = totalPages,
page,
records = totalRecords,
rows = (
from u in userdata.AsEnumerable()
select new
{
i = u.Id,
cell = new string[]{u.Id.ToString(), u.Name,u.Designation,u.City}
}).ToArray()
};