以编程方式将SQL查询转换回Linq Expression

时间:2009-05-21 07:00:37

标签: linq linq-to-sql expression-trees

是否有可能以某种方式以编程方式将sql查询转换为linq表达式树? sql查询应该由这个linq查询生成,所以我认为它是一个穷人的linq查询到t-sql格式的序列化\反序列化。

谢谢。

3 个答案:

答案 0 :(得分:2)

一切皆有可能,只需要大量的工作。问题是您首先必须解析SQL查询,并解释AST以将其转换为linq表达式树。这并非易事,因为Linq与sql不是1:1兼容:例如,在linq中,groupby上的聚合在groupby外部,而在SQL中它们是内部的:它们必须在同一范围内作为小组,否则他们将无法工作。将linq查询转换为SQL查询以及反过来需要这种信息。

因此,为了存储查询,我选择了不同的路线,例如规范模式

答案 1 :(得分:1)

我不相信LINQ-to-SQL中有任何内置。

理论上我敢说它是可能的(虽然它不能保证往返,因为有不同的表达相同查询的方式) - 但很难做得好。

答案 2 :(得分:0)

可能对你有什么帮助 - LINQPad。我想,它不能将SQL转换为LINQ查询,但它可以将LINQ转换为SQL。

一种选择是跟踪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)