从这个问题构建:Trying to concatenate columns in LINQ
现在我要排序:
var orderByIndexVal = Convert.ToInt32(Request["iSortCol_0"]);
var direction = Request["sSortDir_0"];
var gridInfo =
from leader in db.SchoolLdrAdminAccesses
join emp in db.Employees
on leader.ID equals emp.ID
select new List<string> { leader.ID, emp.FirstName + " " + emp.LastName };
return Json(new
{
sEcho = param.sEcho,
iTotalRecords = gridInfo.Count(),
iTotalDisplayRecords = gridInfo.Count(),
aaData = gridInfo.ToArray()
},
JsonRequestBehavior.AllowGet);
阅读本文后: LINQ sorting anonymous types?
我的问题是我的gridInfo
到目前为止我尝试了什么:
if (direction == "asc")
{
gridInfo = gridInfo.OrderBy(gi => gi[orderByIndexVal]);
}
else
{
gridInfo = gridInfo.OrderByDescending(gi => gi[orderByIndexVal]);
}
但我收到以下错误:
LINQ to Entities无法识别方法'System.String get_Item(Int32)'方法,并且此方法无法转换为 商店表达。
在以下代码块中:
return Json(new
{
sEcho = param.sEcho,
iTotalRecords = gridInfo.Count(),
iTotalDisplayRecords = gridInfo.Count(),
aaData = gridInfo.ToArray()
},
JsonRequestBehavior.AllowGet);
答案 0 :(得分:3)
您需要具体化列表,因此order by
不会发生在数据库中,而是在.NET中,在连接发生之后。
var gridInfo = (from leader in db.SchoolLdrAdminAccesses
join emp in db.Employees
on leader.ID equals emp.ID
select new string[]{ leader.ID.ToString(),
emp.FirstName + " " + emp.LastName })
.ToList();
另请注意,使用数组而不是列表会占用更少的内存。希望有所帮助。
答案 1 :(得分:0)
我认为这是问题
new List<string> { leader.ID, emp.FirstName + " " + emp.LastName };
您选择的匿名类型是两列{Int,String}而不是简单列表
只需Select new { leader.ID, emp.FirstName + " " + emp.LastName };
Select语句会自动将其设为IEnumerable,因此您不需要List&lt;&gt;部分
我假设leader.ID在这里是一个Int(可能是错误的)