我试图使用ObjectQuery的ToTraceString()在EF(4.3)上构建一些自定义扩展,以从LINQ代码生成原始SQL。
我注意到,虽然在某些情况下SQL中的列名与查询的元素类型的属性名匹配,但在其他情况下它们被命名为C1,C2等,这使我很难做任何事情与生成的SQL。有谁知道如何将这些列名称映射回属性名称(我只关心能够对诸如匿名类型之类的扁平元组执行此操作,如果有帮助,则不需要任何层次结构)。
完全可以接受依赖于私有/内部反射的解决方案。我知道我可能必须在将来的EF版本中进行调整。另外,如果有帮助,我只会使用MS SqlServer(2008+)。
注意: 第二个链接仅提供对象属性和SQL语句列之间的 位置 映射(作为整数值)…您将必须使用反射来获取实际的对象属性名称,然后执行某种操作对SQL语句进行字符串分析以获取SQL语句的列名(您可以为此使用正则表达式,但这可能会过大)。