是否有可能以某种方式以编程方式将sql查询转换为linq表达式树? sql查询应该是由这个linq查询生成的,所以我把它看作是一个穷人将linq查询序列化\反序列化为t-sql格式。以编程方式将SQL查询转换回Linq Expression
谢谢。
是否有可能以某种方式以编程方式将sql查询转换为linq表达式树? sql查询应该是由这个linq查询生成的,所以我把它看作是一个穷人将linq查询序列化\反序列化为t-sql格式。以编程方式将SQL查询转换回Linq Expression
谢谢。
一切都是可能的,它只是需要工作的卡车。问题在于你首先必须解析SQL查询,并解释AST将其转换为linq表达式树。这并不是微不足道的,因为Linq与sql不是1:1兼容:例如,在linq中,groupby上的聚合是groupby外部的,而在SQL中它们是内部的:它们必须位于相同的范围内作为团队,否则他们将无法工作。这种信息是将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)
哦d * mn ...问题是 - 如果有可能以编程方式执行此操作。 :/ – 2009-05-21 07:26:17