問題タブ [linqkit]
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# - IQueryable の Select Anonymous オブジェクト内での関数呼び出し
次のコードがあります。
ここでは、Take expresion AsEnumerable を使用せずにデータを選択するときにメソッドを呼び出すのに役立つように思われるLinqKitを使用しています。エラー :
LINQ to Entities はメソッド 'PluginApplication.Types.ToTypeName (System.Int32)' メソッドを認識せず、このメソッドはストア式に変換できません。
sql - 私には意味をなさない肥大化したWHERE句を生成する単純なLinq式
このLinq式を使用しようとしています
このように
しかし、それはこれらのクレイジーな場所の条件を生み出します
@p__linq__1 IS NULL
パラメータが文字列でnullableではない場合、なぜそれが生成されるのかわかりません。
私はそれが次のようなものを生み出すことを期待しています
式の代わりに LinqKit 述語を使用して同じことを試みましたが、同じ結果が得られました。私は実際には where 句を追加したもっと複雑なクエリを持っていますが、それがうまくいかなかったときに、この単純なクエリだけに分解したところ、where 句が意図したものとはまったく異なることがわかりました。
問題は、LinqKit 式または述語を使用して意図したものに似た、より単純な where 句を生成する適切な方法は何ですか?
c# - Linqkit から SQL 文字列を取得する
から SQL を返すにはどうすればよいLinqKit.ExpandableQuery<T>
ですか? stevefenton.co.uk
のコードを使用していますが、失敗するようです
internalQueryField
null である。
継承ツリー(LinqKit + Linq)と関係がありますが、頭がわかりません.. :(
entity-framework - Entity Framework の LinqKit と async
Entity Framework Core で述語ビルダーを使用すると、次のエラーが発生します。
ソース IQueryable は IAsyncEnumerable を実装していません。Entity Framework 非同期操作に使用できるのは、IAsyncEnumerable を実装するソースのみです。
これはコードです -
これは私が使用しているEFの正確なバージョンです
c# - Entity Framework 7 で LinqKit の PredicateBuilder を使用して例外をキャストする
シンプルな EF7 コード ファースト モデルがあります: Countries
have States
、States
have Cities
。リレーションと逆リレーションが定義されているため、ナビゲーション フィールドとコレクションを双方向にトラバースできます。
すべての都市でテキスト検索を実行したい: 検索語を分割して各単語を次々と検索し、この検索で都市名、州名、国名を対象とし、この検索を包括的にします (「 france germany francisco'、France の都市、Germany の都市、および San Francisco が検索結果に含まれます)。
それを達成するために、LinqKit の を使用して検索述語を作成していますPredicateBuilder
。
エンティティの単純なメモリ内コレクションで述語の構築とコードの実行をテストすると、すべてが期待どおりに機能します。
Entity Framework 7 コンテキストで Cities DbSet に対して実行すると、この奇妙な例外が発生します ( System.InvalidCastException 'System.Linq.Expressions.FieldExpression' to type 'System.Linq.Expressions.ParameterExpression'
)。
最初は LinqKit に関連していると思いましたが、実際には、2 レベルの関係を含むフィールドを探すときに EF7 で PredicateBuilder を使用することに関連しています。
述語構築コードでは、3 つのレベルで構築していることに気付くでしょう。
- 都市名をテキスト検索のターゲットにします(インメモリおよび DbSet コンテキストでOK)
- 状態名をテキスト検索のターゲットにします(インメモリおよび DbSet コンテキストでOK)
- 国名のテキスト検索をターゲットにします(メモリ内コンテキストでは問題ありませんが、DbSet コンテキストではクラッシュします)。
述語の構築プロセスは明らかに false init から始まり、次に各単語と各フィールド ターゲットの OR になります。ここに投稿する前に、同様のものに関連する以前の質問で読んだように、次の試みを試みました。
- 式構築のさまざまなステップでLinqKit を呼び出し
Expand()
ます (ヒント: 役に立ちませんでした!) - 以前にクラッシュする式をローカル変数に保存し
Expression
、匿名ラムダの代わりにその変数を使用しました (それ以上ではありません)。 - レベル 2 トラバーサル (クラッシュするもの) を含む式のみを使用し、それでもクラッシュする
- レベル 2 トラバーサルの一部を削除し
Name.Contains
ますが、ID のレベル 2 トラバーサルは維持します。この場合、クラッシュしません (もちろん、テキスト検索は行われません)。
以下は、完全な再現コードです (localDb データベースを作成し、それをシードしてから、クラッシュするコードを実行します)。
これは .Net 5 コンソール パッケージ プロジェクトであり、次の NuGet パッケージを project.json ファイルに追加する必要があります。
コンソール アプリの C# コード:
以下は完全なスタック トレースです (フランス語で申し訳ありませんが、翻訳する気はありません。フランス語の単語は英語の単語に比べて透過的です!)。