2

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

谢谢你。

4

3 回答 3

2

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

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

于 2009-05-21T07:59:08.910 回答
1

我不相信 LINQ-to-SQL 中内置了任何东西。

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

于 2009-05-21T07:08:32.787 回答
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)
于 2009-05-21T07:25:24.533 回答