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