を減らす私は式に定数としてTParam value
を注入することによりジェクトのparam値と表現
Expression<Func<TQueryResult, bool>>
へ
Expression<Func<TQueryResult, TParam, bool>>
発現を減少する必要があります。
具体例:
protected IQueryable<TQueryResult> AddQueryFilter<TQueryResult, TParam>(IQueryable<TQueryResult> query, Expression<Func<TQueryResult, TParam, bool>> exp, TParam param)
{
object obj = param;
if (obj is string)
{
if (!string.IsNullOrWhiteSpace((string) obj))
{
var reducedExp = new Expression<Func<TQueryResult, bool>>()
// ...
// the magic that I need to inject param value
//..
return query.Where(reducedExp);
}
}
else if (obj is DateTime)
{
//... return query.Where(reducedExp);
}
else
throw new InvalidOperationException("Param type not supported");
return query;
}
//usage
var qr = Manager.Invoices.Query;
qr = AddQueryFilter(qr, (invoice, value) => value == invoice.Number, numberEdit.Text);
qr = AddQueryFilter(qr, (invoice, value) => value == invoice.Date, dateEdit.Date);
qr = AddQueryFilter(qr, (invoice, value) => invoice.Description.Contains(value), descEdit.Text);
はAddQueryFilter === ConstructSearchExpressionですか? –
はい、申し訳ありません。私は今それを修正しました。 –
どのLINQ実装を使用していますか? LINQ-to-SQL? EFに?何? –