2009-05-21 17 views
2

SQLのクエリをlinq式ツリーに変換することはできますか? SQLクエリはこのlinqクエリによって生成されるはずですので、私はそれを貧しい人の直列化\ t-SQL形式のlinqクエリの直列化解除と考えています。SQLクエリをLinq式にプログラムで変換する

ありがとうございます。

答えて

2

すべてが可能です。問題は、最初にSQLクエリを解析し、それをlinq式ツリーに変換するためにASTを解釈する必要があることです。 Linqはsqlと1:1互換ではないので、これは自明ではありません。たとえば、linqではgroupbyの集約はgroupbyの外部にありますが、SQLでは内部であり、同じスコープになければなりません彼らがそうでなければ彼らは働かないでしょう。この種の情報は、linqクエリをSQLクエリに変換するために必要ですが、逆もまた同様です。

クエリを保存するために、別のルートを選択しました。仕様パターン

1

LINQ-to-SQLには何も組み込まれていないと思います。

理論的には、(同じクエリを表現するさまざまな方法があるため、ラウンドトリップを保証するわけではありませんが)理論的にはわかりませんが、うまくやるのは非常に難しいです。

0

何かがあなたを助けることができるもの - LINQPad。私は、SQLをLINQクエリに変換することはできませんが、LINQをSQLに変換することができると思います。

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) 
+0

Oh d * mn ...これはプログラムで行うことができますか? :/ –

関連する問題