私は最終的に明らかにそれは勝ったエラー - タイプXの変数がスコープから参照が、それは定義されていない
SELECT p.*
FROM MyEntity p
WHERE EXISTS(SELECT *
FROM filters
WHERE (filter.type = 1
AND filter.objectid = p.id
AND filter.value = 1
OR filter.type = 1
AND filter.objectid = p.id
AND filter.value = 2))
AND EXISTS(...)
のようなクエリで結果式を構築しようとしていますまったく同じように見えますが、それは一般的な考え方です。 私は渡されたフィルタに基づいてクエリを構築するためにPredicateBuilderを使用していますので、私はこのようなものがあります:
var query = context.Set<MyEntity>().AsExpandable();
var predicate = PredicateBuilder.New<MyEntity>(true);
//loop through the group filters. The filters in a group have an or relationship
foreach (FilterGroup group in filters)
{
predicate = predicate.And(
p => context.Set<FilteringValue>().AsExpandable().Any(getFilteringPredicate(p,group))
);
}
return query.Where(predicate);
そしてgetFilteringPredicateMethod:
Expression<Func<FilteringValue,bool>> getFilteringPredicate(MyEntity p, FilterGroup filters) {
var fPredicate = PredicateBuilder.New<FilteringValue>(true);
foreach(var filter in filters.FilterList)
{
fPredicate= fPredicate.Or(fv => fv.objectid == p.Id && fv.Type== 1 && fv.value == filter.Value);
}
return fPredicate
}
これは比較的単純なようだが、しかし、私は」エラーが発生する
変数 'p'が 'Models.MyEntity'のスコープ ''から参照されていますが、定義されていません。
getFilteringPredicate()メソッドに製品オブジェクトを渡す方法はありませんか? MyEntityとFilterはEntity Frameworkには関係ありません。
ない完全な答えをしていますが、 '述語ビルダーを初期化する必要がありますfPredicate' 'Or'sを使用すると、' getFilteringPredicate'をfalseにします。 –
また、「MyEntityとFilterはEntity Frameworkには関係ありません。」 - おそらく、それらはおそらくEntity Frameworkに関連していません。関連する必要があります。 –
私はこれをより詳細に分析します。私の最初のテストはうまく見えました。私は答えがあると思っていましたが、そうではありません。私はそれに刻んだショットを与えて答えを投稿します –