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を作成しようとしましたが、これら2つは何かになるでしょうお気に入り:

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>
{
}

そして今、私の問題は、コントローラーアクションメソッドが (IJqQueryable を使用するように変更する前に) のように見えるため、AsQueryable() と同等のものが必要になることです。

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