問題タブ [predicatebuilder]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - Linq In Clause&Predicatebuilding
2つのテーブルがあります。ReportとReportData。ReportDataには制約ReportIDがあります。
ReportDataの述語条件が満たされているすべてのReportオブジェクトを返すようにlinqクエリを作成するにはどうすればよいですか?SQLでは次のようになります。
これが私の述語を構築する方法です:
これは、現時点での私のクエリ構築です。
次のことも試してみました。publicoverrideIQueryableGetReports(Expression> predicate、LLReportsDataContext reportDC){if(reportDC == null)throw new ArgumentNullException( "reportDC");
ただし、次の例外が発生します:「クエリ演算子「Where」に使用されるサポートされていないオーバーロード」。
更新 これはそれを修正しました:
c# - C# PredicateBuilder エンティティ: パラメーター 'f' は、指定された LINQ to Entities クエリ式にバインドされていませんでした
動的フィルターを作成する必要があり、エンティティを引き続き使用したいと考えていました。このため、albahari の PredicateBuilder を使用したいと思いました。
次のコードを作成しました。
コードを実行すると、日付フィルターではないフィルターが 1 つしかありませんでした。したがって、内側の述語のみが満たされました。述語が実行されると、次のエラーが発生しました。
パラメーター 'f' は、指定された LINQ to Entities クエリ式でバインドされていませんでした。
答えを探しているときに、次のページを見つけました。しかし、これはすでに LINQKit に実装されています。
他の誰かがこのエラーを経験し、それを解決する方法を知っていますか?
linq - プログラムで LINQ クエリを、linq 式を正しく説明する読みやすい英語のテキストに変換するにはどうすればよいですか?
私は、アルバハリの PredicateBuilder ライブラリ http://www.albahari.com/nutshell/を使用して、実行時に動的に linq 式を作成するプロジェクトに取り組んでいます。この動的に作成された Expression<Func<T, bool>> 型の linq 述語を、実行時に読みやすい英語のステートメントに変換する方法を見つけたいと思います。
例として、静的に作成された linq ステートメントを示します。
from p in Purchases
select p
where p.Price > 100 && p.Description != "Bike".
この linq ステートメントでは、実行時に次の行に沿って英語の説明を動的に生成したいと考えています。
「価格が 100 を超え、説明が自転車ではない商品を探しています」.
この目標を達成するために既に存在するライブラリはありますか? PredicateBuilder を使用して where 述語を動的に生成していることを覚えておいてください。解決策が存在しない場合、どのように解決策を構築しますか?
ありがとう!
c# - 条件付きAND、OR、およびNOTフィルターを使用するLinq PredicateBuilder
LINQ to SQLを使用するプロジェクトがあります。このプロジェクトでは、クライアントがandまたはanまたは検索を実行するかどうかを選択できるように、いくつかの検索ページを書き直す必要があります。
PredicateBuilderを使用してLINQクエリをやり直すことについては考えましたが、これはかなりうまく機能していると思います。私は事実上、述語を含むクラスを持っています。例:
検索を実行するために私はこれを行っています(簡潔にするためにいくつかのコードは省略されています):
私はこれにかなり満足していますが、2つの懸念があります。
- SearchTypeプロパティを評価するif/elseブロックは、潜在的なコードの臭いである可能性があるように感じます。
- クライアントは現在、'/'または'ではない'検索を実行できることを主張しています。
ポイント2に対処するために、私は自分の表現を書き直すだけでこれを行うことができると思います。
ただし、これはちょっとした悩みの種のように感じます。これは通常、より良い解決策があることを意味します。誰かがこれをどのように改善できるかをお勧めできますか?私は動的LINQを知っていますが、LINQの強い型付けを失いたくありません。
c# - LINQ述語で使用されるコレクションの範囲
私はPredicateBuilderが本当に好きです。これにより、あらゆる種類のクエリを非常に動的に構築できます。述語変数はさまざまなオブジェクトに渡すことができ、それらは知っている値などを追加できます。ハッシュされたコレクションに.Containsを使用する必要がある場合を除きます。Bzzt!クラッシュして燃えます。
たとえば(例/擬似コード、これはコンパイル/実行される場合とされない場合があります):
これを実行しようとすると、NotSupportedExceptionが発生します。メソッド'Boolean contains(Int32)'は、selectedIDs HashSetがスコープ内にないため、SQLへの変換がサポートされていません。これをすべて同じ方法で行うと、正常に機能します。
HashSetが宣言されている場所とは異なるスコープで使用できるように、述語を解決またはコンパイルするための正しい方法を知る必要があります。何か助けはありますか?
更新:私はこれをかなり間違っていました。以下のコードは正常に機能するため、スコープの競合はありません。ジェイありがとう。
silverlight - 式ツリーから述語メソッドを動的に構築するにはどうすればよいですか?
シナリオは次のとおりです。Silverlight 4.0、DataGrid、PagedCollectionView アイテムソース。目的は、フィルターを PCV に適用することです。フィルターは - である必要がありますPredicate<object>(Method)
。ここで、メソッドはオブジェクトに対していくつかのロジックを実装し、含めるために true/false を返します。私が持っているのは、オプションでフィルター ロジックに 3 つの異なる基準を含める必要があり、明示的なコードはすぐに見苦しくなります。私たちはそれを望んでいませんよね?
したがって、PredicateBuilder を使用して式ツリーを構築し、それを Linq.Where に渡す方法があることがわかりました。
[ちなみに、これは私がやろうとしていることではありません]
3 つのオプションの基準を使用して、次のようなものを書きたいと思います。
もちろん、PredicateBuilder はExpression<Func<T, bool>>
実際の述語メソッドではないものを作成するため、これはコンパイルされません。しかし、式ツリーをメソッドに変換する方法があることがわかったので、ネストされた if/then/else ステートメントの束に頼ることなく、目的を達成する方法があるはずだと私には思えました。
問題は、述語メソッドを動的に構築する方法はありますか?
ティア
c# - PredicateBuilder メソッドの説明
PredicateBuilderのソースを調べたところ、その実装に興味をそそられました。Or メソッドの実装を見てみましょう。
述語本体に OrElse を使用するだけでなく、新しいラムダを呼び出すのはなぜですか?
c# - LINQ to SQL - PredicateBuilder
PredicateBuilder をさらに活用する方法についての簡単な質問です。以下のように動作します。
問題は、任意のメンバーでも検索したい場合、つまり、関数 string[] をキーワードとして渡すだけでなく、fieldToSearch などの検索するフィールドも渡し、p=> p.Description を置き換える場合です。含む (一時)); fieldToSearch による検索を可能にする何かで?
これは可能ですか、それは悪い考えですか?
c# - SubSonic 3、実行時に動的または式を作成します
ユーザーの選択に基づいてlinqクエリを動的に構築する必要がある状況があります。SQLを動的に生成する必要がある場合は、次のように実行できます。
次に、同じ方法でlinqクエリを作成する必要があります。
これは亜音速でうまく機能します
PredicateBuilder http://www.albahari.com/nutshell/predicatebuilder.aspxで試しましたが、亜音速で例外がスローされます。
スローされる例外:NotSupportedException: The member 'productType1' is not supported
at SubSonic.DataProviders.MySQL.MySqlFormatter.VisitMemberAccess
。
誰もがこのクエリを機能させる方法を知っています:
c# - C# 述語ビルダーが機能しない
次のコードで述語ビルダーを使用しようとしています:
問題は、次の行にあります。
p.Id
IntelliSense は実行されず、次のコンパイル エラーがスローされます。