【发布时间】:2011-02-25 09:17:34
【问题描述】:
我正在关注 Phil Haacks 关于将 JQGrid 与 ASP.Net MVC 结合使用的教程。我的应用程序是使用 Entity Framework 4 的 ASP.Net MVC 3。
我有以下代码对返回到 JQGrid 的数据执行排序和分页
var query = equipService.GetAllEquipment().AsQueryable()
.OrderBy("it." + sidx + " " + sord)
.Skip(pageIndex * pageSize)
.Take(pageSize);
但是,此代码会在 .OrderBy("it." + sidx + " " + sord) 行产生错误。错误是
System.Linq.Queryable.OrderBy<TSource,TKey>(System.Linq.IQueryable<TSource>, System.Linq.Expressions.Expression<System.Func<TSource,TKey>>)' cannot be inferred from the usage. Try specifying the type arguments explicitly.
查询正在调用我的服务层中的方法 GetAllEquipment(),如下所示
public List<Equipment> GetAllEquipment()
{
List<Equipment> equipList = new List<Equipment>();
equipList = equipRepository.GetAllEquipment();
return equipList;
}
这个方法,然后在我的仓库中调用同名的方法,像这样
public List<Equipment> GetAllEquipment()
{
var query = (from e in Data.DBEntities.Equipments
select e).ToList();
return query;
}
我可以通过在我的控制器方法中创建我的 objectcontext 的实例并使用此代码来解决问题
using (AssetEntities context = new AssetEntities())
{
int pageIndex = Convert.ToInt32(page) - 1;
int pageSize = rows;
int totalRecords = context.Equipments.Count();
int totalPages = (int)Math.Ceiling((float)totalRecords / (float)pageSize);
var query = context.Equipments
.OrderBy("it." + sidx + " " + sord)
.Skip(pageIndex * pageSize)
.Take(pageSize);
}
但是,我并不想这样做,而是希望保留我在整个应用程序中用于所有数据库交互的存储库模式。
关于如何解决此问题的任何想法?
一如既往地感谢大家。
【问题讨论】:
-
.OrderBy("it." + sidx + " " + sord)是 not 动态 LINQ 语法。它是 ESQL / QueryBuilder 语法。你知道你调用的是哪个方法吗? -
@Craig:我必须下载动态查询库,如 weblogs.asp.net/scottgu/archive/2008/01/07/... 所述,然后在顶部引用 System.Linq.Dynamic我的控制器。我的代码现在可以工作了 :) 谢谢。
标签: entity-framework-4 asp.net-mvc-3 jqgrid linq-to-entities entity