述語ビルダーを使用していますが、正常に動作しています
var filter = sortKeys.Aggregate(filter, (currentFilter, sortkey) => currentFilter.Or(
x => x.Appointments.Any(y => y.RowStatus == Constants.CurrentRowStatus )));
外出先で条件を追加して関数を再利用できるように、予定内の条件を別の述語ビルダーに分割しようとしています。
式を作成してからメインの述語ビルダーで使用しようとしましたが、失敗しています
private static Expression<Func<Appointment, bool>> TmpApt(string status)
{
var predicate = PredicateBuilder.False<Appointment>();
predicate = predicate.Or(p => p.RowStatus == status);
return predicate;
}
上記の式を使用するように主述語を変更
var filter = sortKeys.Aggregate(PredicateBuilder.True<Person>(), (current, s) =>
current.Or(x => x.Appointments.Any(TmpApt(s))));
それはエラーを示しています
引数の型 '
System.Linq.Expressions.Expression<System.Func<Appointment,bool>>
' はパラメーターの型に割り当てられませんSystem.Func<Appointment,bool>
Expand のような LinqKit 拡張メソッドも試しましたが、解決策を見つけることができました。
LINQ で再利用可能な述語式も試した場合、コンパイル中にエラーは表示されませんが、アプリケーション側では表示されます
クエリ演算子 '
Any
' にサポートされていないオーバーロードが使用されています。
エラーを解決する方法や、別の解決策を提案する方法を教えてください。