問題タブ [compiled-query]
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-to-SQL コンパイル済みクエリの問題 (コンパイルされていないクエリとして機能)
IQueryable
たとえばFindNewCustomers()
、FindCustomersRegisteredAfter(int year)
LINQ to SQL のクエリを「チェーン」するために使用するC# 拡張メソッドなどがあります。
今私の問題に:私はコンパイルされたクエリを作成したい、例えば:
FindCustomersRegisteredAfter(int year)
メソッドは、 を受け取って返す拡張メソッドですIQueryable
。このOrderBy
メソッドは、文字列に基づいて動的な式を作成する拡張メソッド (System.Linq.Dynamic) でもあります (たとえば、"FirstName ASC" はフィールド FirstName を昇順で並べ替えます)。Skip
およびTake
は組み込みメソッドです。
上記(コンパイルされたクエリではなく、通常のクエリ)は完璧に機能します。コンパイルされたクエリに入れると、次のエラーが発生します。
メソッド 'System.Linq.IQueryable`1[Domain.Customer] FindCustomersRegisteredAfter[Customer](System.Linq.IQueryable`1[Domain.Customer], Int32)' には、SQL への変換がサポートされていません。
繰り返しになりますが、クエリがコンパイルされていない場合、これは完全に機能し、通常の LINQ クエリだけです。エラーは、CompiledQuery.Compile() 内にある場合にのみ表示されます。
ヘルプ??!
編集: var query = (...) CompiledQuery.Compile の内部と同じ方法でクエリを作成すると、次の SQL が生成されます。
これで、SQL はすべて完全に変換可能であることがわかります。これを繰り返し実行するには、@p0、@p1、および @p2 を入力するだけで済みます。CompiledQuery.Compile の何が問題になっていますか?!?
更新: OrderBy が機能しないことを理解しています (@p パラメータではないため)。ただし、 CompiledQuery.Compile が拡張メソッドで機能しない理由をまだ理解しようとしています。このトピックに関するインターネット上の情報は事実上存在しません。
linq - LINQ CompiledQueryの動的順序(SQL ORDERBY)
LINQ CompiledQueryで動的なORDERBYを作成するにはどうすればよいですか(たとえば、コンパイルされたクエリのパラメーターとしてOrder FieldとDirectionを指定します)?
linq - LINQ コンパイル済みクエリでインライン テーブル値関数を使用する
ITVF (インライン テーブル値関数) を利用する LINQ コンパイル済みクエリを作成することは可能ですか?
linq-to-sql - コンパイルされた Linq クエリから Sql コマンドを抽出する方法
通常の (コンパイルされていない) Linq to Sql クエリでは、次のコードを使用して IQueryable から SQLCommand を抽出できます。
コンパイルされたクエリに対して同じことを行うことは可能ですか?
次のコードは、コンパイルされたクエリへのデリゲートを提供します。
これを使用して IQueryable を生成し、SqlCommand を抽出しようとすると、うまくいかないようです。コードをデバッグすると、返された SqlCommand に「SELECT NULL AS [EMPTY]」という「非常に」便利な CommandText があることがわかります。
この特定のシナリオについては、グーグルで何も見つけることができません。間違いなく、試行するのが一般的ではないためです...
だから....何か考えはありますか?
c# - コンパイルされたLINQクエリとDataLoadOptions...ひねりを加えて!
私はここで議論されている方法について知っています:
需要の高いASP.NETWebサイトのLinqtoSqlでコンパイルされたクエリに関する一般的な問題を解決する
...しかし、これは私の状況では機能しません:
「クエリから結果が返された後は、ロードオプションを設定できません。」
Codesmith PLINQOスクリプトを使用してエンティティとマネージャーコードを生成していますが、マネージャーコードは次のようになります。
最初に、静的DataLoadOptionsを次のようにSearchmanagerクラスにドロップしてみました。
...次に、次のようにGetAllメソッドのコンテキストに提供します。
...そしてそれは私が上で述べたエラーを私に与えました。これは、クエリがすでにコンパイルされているため、「余分な」DataLoadOptionsを追加できないためですか?もしそうなら、クエリがコンパイルされる前に、どのようにDataLoadOptionsを適用することが可能でしょうか?
linq - Linq コンパイル済みクエリとパラメーターとしての int[]
次の LINQ to SQL コンパイル済みクエリを使用しています。
コンパイルされたクエリにシーケンス入力パラメーターを使用することはできず、実行時に「パラメーターをシーケンスにすることはできません」というエラーが発生することはわかっています。
ここに関連する別の投稿で、解決策があることがわかりましたが、理解できませんでした。
入力パラメーターとして配列を使用してコンパイルされたクエリを使用することを知っている人はいますか?
もしそうなら、例を投稿してください。
c# - コンパイルされたクエリは毎回同じものを返します
私はこのコンパイルされたクエリを持っています:
一度実行すると、予想される Foo オブジェクトが返されます。
しかし、そのオブジェクトの DeletionDate が db に設定された後でも、同じオブジェクトが返されます - 私は null を期待しています。(アプリ プールをリサイクルした後、予想どおり null を返します。)
何らかの理由で、代わりに次のコンパイル済みクエリを使用すると (そして DateTime.UtcNow を渡すと) 機能しますが、その理由はわかりません。
vb.net - コンパイルされたクエリからリストを返されないのはなぜですか?
何度もヒットするクエリに対してコンパイルされたクエリを使用することで、アプリを高速化していました。
私はそれを次のように実装しようとしました:
これは機能せず、次のエラーメッセージが表示されました。
ただし、コンパイルされたクエリを変更して、次のようにListではなくIQueryableを返すようにした場合:
それはうまくいきました。これがなぜであるかについて誰かが何か光を当てることができますか?
ところで、コンパイルされたクエリは素晴らしいです!彼らは私のアプリを2倍高速化しました。
linq-to-sql - Linq-to-sql コンパイル済みクエリは、送信された DataContext に属さないオブジェクトを返しますか?
コンパイルされたクエリ:
コンパイルされたクエリが別のデータ コンテキストから結果を返しているようです
他の (複雑な) 単体テストを実行すると、期待どおりの結果が得られます: 新しいものではないエンティティをアタッチまたは追加しようとしました。おそらく、別の DataContext から読み込まれています。
もう 1 つの重要な情報は、このテストが TransactionScope の下にあることです (ただし、トランザクションがなくても問題が発生しています)。
XMLを使用してDBにマップされたPOCOを使用しています。
更新: 次のリンクで同様の問題が説明されているようです (このバグは解決されていますか?): http://social.msdn.microsoft.com/Forums/en-US/linqprojectgeneral/thread/9bcffc2d-794e-4c4a-9e3e-cdc89dad0e38
c# - このCompiledQueryでパフォーマンスが向上しないのはなぜですか?
よく使うクエリを高速化しようとしています。使用するCompiledQuery
ことが答えのようでした。しかし、コンパイルされたバージョンを試したところ、コンパイルされたバージョンとコンパイルされていないバージョンのパフォーマンスに違いはありませんでした。
Queries.FindTradeByTradeTagCompiled
誰かが使用するよりも速くない理由を教えてもらえますかQueries.FindTradeByTradeTag
?