【发布时间】: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