为了在本教程之后使用MVC JqGrid,我添加了一些 Linq 扩展,基本上是这些:
public static IQueryable<T> OrderBy<T>(this IQueryable<T> query, string sortColumn, string direction)
{
//...
return query.Provider.CreateQuery<T>(result);
}
public static IQueryable<T> Where<T>(this IQueryable<T> query,
string column, object value, WhereOperation operation)
{
//....
return query.Provider.CreateQuery<T>(result);
}
问题是我真的不喜欢让任何查询都可以访问这些扩展方法的想法,因为我认为它们与 JqGrid 非常相关,所以我试图创建一个扩展 IQueryable 的 IJqQueryable,然后这两个将是一些东西喜欢:
public static IJqQueryable<T> OrderBy<T>(this IJqQueryable<T> query, string sortColumn, string direction)
{
//Same code as before
var normalQuery = query.Provider.CreateQuery<T>(result);
return normalQuery as IJqQueryable<T>;
}
public static IJqQueryable<T> Where<T>(this IJqQueryable<T> query,
string column, object value, WhereOperation operation)
{
//Same code as before
var normalQuery = query.Provider.CreateQuery<T>(result);
return normalQuery as IJqQueryable<T>;
}
为此,我只创建了这个界面:
public interface IJqQueryable<T> : IQueryable<T>
{
}
现在我的问题是我需要与 AsQueryable() 等效的方法,因为我的控制器操作方法看起来像(在更改为使用 IJqQueryable 之前)
public JsonResult ComplaintTypes(GridSettings grid)
{
var complaintTypes = _queryComplaintTypes.GetAll();
Func<ComplaintType, Object> lambda = (complaintType => (new {
complaintType.ComplaintDescription,
complaintType.ComplaintTypeId
}));
var result = _jqGridFactory.Get(grid, complaintTypes.AsQueryable(), lambda);
return Json(result, JsonRequestBehavior.AllowGet);
}
显然我不能用作 IJqQueryable 或将其转换为 (IJqQueryable) 投诉类型。
希望我说得相当清楚,将不胜感激任何想法
谢谢