2009-05-21 7 views

Antwort

2

Alles ist möglich, es erfordert nur eine LKW-Ladung von Arbeit . Das Problem besteht darin, dass Sie zuerst die SQL-Abfrage analysieren und den AST interpretieren müssen, um ihn in einen linq-Ausdrucksbaum umzuwandeln. Dies ist nicht trivial, da Linq nicht 1: 1 mit sql kompatibel ist: in linq sind Aggregate in einer groupby zum Beispiel extern zu groupby, während sie in SQL intern sind: sie müssen im selben Bereich liegen als die Gruppe, sonst werden sie nicht arbeiten. Diese Art von Informationen wird benötigt, um linq-Abfragen in SQL-Abfragen zu konvertieren, aber auch umgekehrt.

Um Abfragen zu speichern, würde ich eine andere Route wählen, z.B. ein Spezifikationsmuster

1

Ich glaube nicht, dass in LINQ-to-SQL etwas eingebaut ist.

In der Theorie wage ich zu sagen, dass es möglich wäre (obwohl es Roundtripping nicht garantieren würde, da es verschiedene Möglichkeiten gibt, dieselbe Abfrage auszudrücken) - aber sehr schwer, gut zu machen.

0

Was kann Ihnen vielleicht helfen - LINQPad. Ich denke, es kann SQL nicht in die LINQ-Abfrage übersetzen, aber es kann LINQ in SQL übersetzen.

Eine Option wäre die Nachverfolgung von SQL-generiertem IL-Code. Zum Beispiel:

SELECT TOP (50) [t0].[Id], [t0].[tralala] 
FROM [pamparam] AS [t0] 

Erzeugt:

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 

diese Weise ist es ganz offensichtlich ist, dass LINQ-Abfrage würde wie folgt aussehen:

pamparam.Take (50) 
+0

Oh d * mn ... Die Frage war - wenn es möglich ist, dies programmgesteuert zu tun. : / –

Verwandte Themen