【发布时间】:2016-12-18 13:44:31
【问题描述】:
当我使用由OR 连接的两个条件时,SQL Server 的结果不正确。
我该如何解决?
这是我的 LINQ 代码并生成 SQL(为我创建的反射):
query.Where(p => ((p.Code == "100000") Or p.Code.EndsWith("200")))
query.Where(p => (p.year == "2015"))}
我在运行时添加了这个where 子句,现在我添加了另一个扩展方法,但它不起作用:
query.sum(p => p.value)
例外:
Microsoft.EntityFrameworkCore.dll 中出现“System.Data.SqlClient.SqlException”类型的异常,但未在用户代码中处理
附加信息:指定的非布尔类型的表达式 预期条件的上下文,靠近“AND”。
SQL 翻译:
SELECT SUM([e].[Value])
FROM [acc].[Data161] AS [e]
WHERE (CASE
WHEN RIGHT([e].[Code], LEN(N'201')) = N'201'
THEN CAST(1 AS BIT) ELSE CAST(0 AS BIT)
END |
CASE
WHEN RIGHT([e].[Code], LEN(N'199')) = N'199'
THEN CAST(1 AS BIT) ELSE CAST(0 AS BIT)
END)
AND ([e].[SetadCode] = N'161')
正确的 SQL 应该在AND 之前有= 1。
但如果没有 sum 它可以正常工作,并在 SQL 命令中添加 = 1
【问题讨论】:
-
发生错误是因为您有两个 WHERE。相反,我们将“与”或“或”放入您的第一个 WHERE。
-
错误的 SQL 总是 是一个框架错误。请举报。
-
@jdweng 我在运行时在某些条件下添加了这个,这不是问题
-
@usr 我在 github 中添加了一个问题 :( 我希望我的代码是错误的,有人给我一个更好的方法。顺便说一下,我添加了一个问题
-
你试过这个吗:query.Where(p => (p.year == "2015") And ((p.Code == "100000") 或者 p.Code.EndsWith(" 200")))
标签: c# sql-server linq entity-framework-core