【问题标题】:Query syntax is not valid near identifier 'PIVOT'查询语法在标识符“PIVOT”附近无效
【发布时间】:2012-12-22 12:08:25
【问题描述】:

我正在尝试在 Entity Framework 4 中运行动态 SQL 查询

我将我的查询创建为一个字符串,它变成了这样:

SELECT 
    NodeID 
    ,RowID 
    ,[Comment]
    ,[Subject]
    ,[Text] 
FROM 
    (SELECT 
        nr.Node_ID as NodeID 
        ,nr.ID as RowID 
        ,f.Name 
        ,d.Value 
    FROM NoteNode.dbo.[NodeRows] AS nr 
    LEFT JOIN NoteNode.dbo.[NodeData] AS d ON nr.ID = d.NodeRow_ID 
    LEFT JOIN NoteNode.dbo.[NodeFields] AS f ON f.ID = d.Field_ID 
    WHERE nr.Node_ID = (1) ) AS x 
    PIVOT 
    ( 
        MAX(Value) 
        for Name IN ([Comment],[Subject],[Text]) 
    ) AS p

直接在 MSSQL Studio 中运行此代码可以完美运行,完全没有问题.. 但是,当我尝试使用实体框架运行它时:

var DataRecords = new ObjectQuery<DbDataRecord>(dataQuery, (ObjectContext) _db.ObjectContext());

它不起作用,并给我以下错误:

{“查询语法无效。靠近标识符'PIVOT',第17行,第31列。”}

试图稍微弄乱语法,并清除所有换行符和制表符,但我一直回到这个错误。

有什么想法吗?

仅供参考:我愿意接受有关如何将其转换为 LINQ/LAMBDA 的建议,或者我是否应该以完全不同的方式进行此操作。

【问题讨论】:

  • ObjectQuery:“查询本身可以通过使用 Entity SQL 语句或 LINQ 查询来创建”——你提供了 T-SQL——这两个选项都没有。
  • 在 MSDN 上的帖子建议您可以使用 T-SQL 并声称它正在工作。 social.msdn.microsoft.com/Forums/eu/adodotnetentityframework/…
  • 在这里的帖子中也使用 T-SQL 和 ObjectQuery stackoverflow.com/questions/7918071/…
  • 在这些问题中这看起来像是相当标准的 SQL - 它既不是 T-SQL 也不是实体 SQL。但是您正在尝试使用 T-SQL 方言中非常重要的一部分。
  • 只是一个快速的想法,您不能使用该 T-SQL 在您的数据库中创建一个视图,然后将该视图导入您的 EF 模型吗?这样你就知道 EF 不会拒绝它。

标签: sql-server-2008 c#-4.0 entity-framework-4


【解决方案1】:

您不能使用ObjectQuery 来执行原始 SQL。请改用ObjectContext.ExecuteStoreQuery

【讨论】:

  • 有什么例子可以说明如何做到这一点?我还没有找到任何好的。
  • 使用查询结果集中名为列的属性创建类并执行objectContext.ExecuteStoreQuery&lt;YourClass&gt;(dataQuery)
  • 只运行var DataRecords3 = _db.ObjectContext().ExecuteStoreQuery&lt;DbDataRecord&gt;(dataQuery); 导致此错误:结果类型“System.Data.Common.DbDataRecord”可能不是抽象的,必须包含默认构造函数。 I'我猜这意味着我不能使用&lt;DbDataRecord&gt;,而是必须定义一个具有特定列的类型..这不是我能做的(我永远不知道查询最终会返回多少列,因为它是在运行时生成的) .
  • 不能查询数据记录,只能查询强类型类。如果您不知道结果集中有多少列 EF 不适合您。请改用SqlDataReader
  • 对于除此查询之外的所有其他内容,我知道我将返回哪些列(对这些查询使用 LINQ)。希望我不必为此打开单独的连接,但似乎这是唯一的方法=/
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-24
  • 2016-02-01
  • 1970-01-01
  • 2022-11-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多