4

我正在尝试使用 ObjectQuery 的 ToTraceString() 在 EF (4.3) 上构建一些自定义扩展,以从 LINQ 代码生成原始 SQL。

我注意到,虽然在某些情况下 SQL 中的列名与查询元素类型的属性名相匹配,但在其他情况下,它们被命名为 C1、C2 等。这让我很难做任何事情使用生成的 SQL。有谁知道如何将这些列名映射回属性名(如果有帮助,我只关心能够对诸如匿名类型之类的平面元组执行此操作,我不需要任何分层)。

依赖私有/内部反射的解决方案是完全可以接受的。我了解我可能需要在未来的 EF 版本中对其进行调整。另外,如果有帮助,我只使用 MS SqlServer (2008+)。

4

1 回答 1

2

我刚刚问并回答了一个类似的问题(您可以忽略所有 DataTable 的东西,但它可能很有用,因为它显示了如何使用映射):

实体框架 - IQueryable 到 DataTable

显示如何获取对象属性位置和 SQL 语句列位置之间的映射的原始帖子可以在这里找到:

Entity Framework 如何管理映射查询结果到匿名类型?

注意:第二个链接仅提供对象属性和 SQL 语句列之间的位置映射(作为整数值)...您必须使用反射来获取实际的对象属性名称,然后执行某种操作对 SQL 语句进行字符串分析以获取 SQL 语句列名(您可以为此使用正则表达式,但这可能有点矫枉过正)。

于 2012-08-23T16:39:49.473 回答