SQLクエリは、プログラムバックLINQの式に変換します
-
23-08-2019 - |
質問
これは何とかプログラムでLINQの式ツリーにSQLクエリを変換することは可能ですか? SQLクエリは、このLINQクエリによって生成されることになっているので、私はT-SQL形式へのLINQクエリの貧乏人の直列化\デシリアライゼーションのようなものと考えています。
ありがとうございます。
解決
すべてはそれだけで仕事のトラック輸送を必要とし、可能です。問題は、あなたが最初のSQLクエリを解析し、LINQの式ツリーに変換するASTを解釈しなければならないということです。 SQLとの互換性1:LINQのは1ではないので、これは、些細なことではないSQLで、彼らは内部にいる間、たとえば、LINQで、GROUPBYの凝集体は、GROUPBYの外部にある:彼らは、同じスコープ内でなければなりませんGROUPBYとそうでない場合は動作しません。情報のこの種のは、SQLクエリにLINQクエリを変換するだけでなく、他の方法で回避のために必要とされています。
ストアクエリにだから、私は、例えば、別のルートを選んだと思います仕様パターン
他のヒント
私は、LINQツーSQLに組み込まれているものがあります信じていません。
理論的には私は(それがラウンドトリップ保証されませんが、同じクエリを表現する様々な方法があるので、)それは可能でしょうあえて言う - しかし、うまくやるのは非常に難しい。
。シング - LINQPad。私はそれがLINQクエリにSQLを変換することができない、と仮定し、それはSQLにLINQを翻訳することができます。
1つのオプションは、SQLから追跡するだろうILコードを生成しました。たとえばます:
SELECT TOP (50) [t0].[Id], [t0].[tralala]
FROM [pamparam] AS [t0]
を生成します:
IL_0001: ldarg.0
IL_0002: call LINQPad.User.TypedDataContext.get_pamparam
IL_0007: ldc.i4.s 32
IL_0009: call System.Linq.Queryable.Take
IL_000E: call LINQPad.Extensions.Dump
この方法で、それはLINQクエリは次のようになりますことを、非常に明白です。
pamparam.Take (50)