0

为了在本教程之后使用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) 投诉类型。

希望我说得相当清楚,将不胜感激任何想法

谢谢

4

0 回答 0