私の問題に対する既存の答えを見つけることができなかったのは初めてです。
基本的に、IQueryable の使用法でアクティブなアイテムをフィルタリングできるようにする一般的な式があります。
queryableGoesHere.ActiveAtItems(x => x.StartDate, x => x.EndDate, asAtDate, true)
式の実装:
public static Expression<Func<T, Func<T, DateTime>, Func<T, DateTime?>, DateTime?, bool?, bool>> GetActiveAtItemsExprGeneric<T>()
where T : class
{
return (o, from, to, givenTime, isActive) => (!to(o).HasValue);
}
問題を強調するために、戻り行を単純化しました。この場合は「to(o)」の2つの関数のいずれかを使用しようとするまで機能します。
ここで linqkit を使用すると失敗します。
return (from m in source.AsExpandable()
where predicate.Invoke(m, arg1, arg2, arg3, arg4)
select m);
「追加情報: タイプ 'System.Linq.Expressions.TypedParameterExpression' のオブジェクトをタイプ 'System.Linq.Expressions.LambdaExpression' にキャストできません。」
今、私は func を渡したことがなく、この方法で式で使用したことがなく、私の google-fu はこの例外への参照を見つけることができませんでした。私がやっていることさえ可能かどうかはわかりません...どんな助けも大歓迎です!