0

クエリに単純なフィルターを追加するこの関数があるとします。

    public static IQueryable<MyType> FilterSpecificParam(this IQueryable<MyType> query, string param)
    {

        var req = query.Where(c =>
            (!(param == null || param.Trim() == "") && c.SpecificColumn.StartsWith(param))
                   || ((param == null || param.Trim() == "")));

        return req;
    }

私は次のように使用します:

SomeQueryOnMyTable.FilterSpecificParam(MyFilter)

今、設定したいフィルターごとにそのような機能を繰り返したくありません! したがって、次のようにクエリを記述できることがわかりました。

SomeQueryOnMyTable.FilterGenericParam(MyFilter, c => c.TheColumnIWantToTest))

私の関数のこのプロトタイプを持つ:

        public static IQueryable<MyType> Filter(this IQueryable<MyType> query, string param, Func<MyType, string> predicate)

問題: 列の値を手に入れることができません:

        public static IQueryable<MyType> Filter(this IQueryable<MyType> query, string param, Func<MyType, string> predicate)
    {

        var req = query.Where(c =>
            (!(param == null || param.Trim() == "") && predicate.Invoke(What???).StartsWith(param))
                   || ((param == null || param.Trim() == "")));

        return req;
    }

上記のコードのpredicate.Invokeに注意してください。これはMyType型の引数を要求します。

前のクエリ (SomeQueryOnMyTable) の引数を取得したいのですが、これを行う方法の手がかりがありません... アイデアはありますか?

編集:この一般的なフィルター機能を実行するためのより良い方法があるかもしれませんが、最終的にはそれを答えとして受け入れます

4

1 に答える 1