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

以编程方式将SQL查询转换回Linq表达式,linq,linq-to-sql,expression-trees,Linq,Linq To Sql,Expression Trees,是否可以通过编程方式将sql查询转换为linq表达式树?sql查询应该由这个linq查询生成,所以我认为它是穷人将linq查询序列化\反序列化为t-sql格式 谢谢。我不相信LINQtoSQL中内置了任何东西 理论上,我敢说这是可能的(尽管它不能保证往返,因为表达同一个查询有不同的方式),但很难做好。可能对您有帮助的事情-LINQPad。我想,它不能将SQL转换为LINQ查询,但可以将LINQ转换为SQL 一个选项是从SQL生成的IL代码进行跟踪。例如: SELECT TOP (50) [t0]

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


谢谢。

我不相信LINQtoSQL中内置了任何东西


理论上,我敢说这是可能的(尽管它不能保证往返,因为表达同一个查询有不同的方式),但很难做好。

可能对您有帮助的事情-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)

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


所以为了存储查询,我选择了不同的路径,例如规范模式

Oh d*mn。。。问题是-是否有可能通过编程实现这一点:/