Asp.net mvc 展开iQueryEnable以使用自定义linq扩展

Asp.net mvc 展开iQueryEnable以使用自定义linq扩展,asp.net-mvc,linq,mvcjqgrid,Asp.net Mvc,Linq,Mvcjqgrid,为了使用以下内容,我添加了一些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&g

为了使用以下内容,我添加了一些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非常相关,所以我试图创建一个ijqQuyEnter,扩展IQueReable,然后这两个将是类似的:

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类型

希望我说得很清楚,如果有任何想法,我都会很感激


谢谢

将扩展方法放在名称空间中,然后使用MyApplication.IQueryableExtensions声明名称空间;只有当你需要使用这些扩展时。谢谢克里斯托弗,现在对我来说有意义了