クエリに単純なフィルターを追加するこの関数があるとします。
    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) の引数を取得したいのですが、これを行う方法の手がかりがありません... アイデアはありますか?
編集:この一般的なフィルター機能を実行するためのより良い方法があるかもしれませんが、最終的にはそれを答えとして受け入れます