是否有可能以某种方式以编程方式将 sql 查询转换为 linq 表达式树?sql 查询应该是由这个 linq 查询生成的,所以我认为它是一个穷人将 linq 查询序列化\反序列化为 t-sql 格式。
谢谢你。
是否有可能以某种方式以编程方式将 sql 查询转换为 linq 表达式树?sql 查询应该是由这个 linq 查询生成的,所以我认为它是一个穷人将 linq 查询序列化\反序列化为 t-sql 格式。
谢谢你。
一切皆有可能,只需要一卡车的工作量。问题是您首先必须解析 SQL 查询,并解释 AST 以将其转换为 linq 表达式树。这不是微不足道的,因为 Linq 与 sql 不是 1:1 兼容:例如,在 linq 中,groupby 上的聚合是 groupby 外部的,而在 SQL 中它们是内部的:它们必须在相同的范围内作为 groupby 否则他们将无法工作。将 linq 查询转换为 SQL 查询需要这种信息,反之亦然。
所以为了存储查询,我选择了不同的路线,例如规范模式
我不相信 LINQ-to-SQL 中内置了任何东西。
理论上我敢说这是可能的(尽管它不能保证往返,因为有不同的方式来表达相同的查询) - 但很难做好。
什么可以帮助你 - 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)