展开IQueryable以使用自定义linq扩展

时间:2014-01-23 13:17:24

标签: asp.net-mvc linq mvcjqgrid

MVC JqGrid之后使用this tutorial我正在添加一些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)complaintTypes。

希望我说得相当清楚,会欣赏任何想法

由于

0 个答案:

没有答案
相关问题