您好我正在尝试使用Linq将此代码从SQL转换为C#
SQL代码是这样的:
SELECT N.Name,N.Unit,N.Typee,ID,NOTE
FROM Table_A N join Table_B A on (N.ID = A.ID)
join NotasQL G on ((N.Not1 = G.CODE) or (N.Not2 = G.CODE) )
join Attributes X on (A.AppID= X.AppID)
Run Code Online (Sandbox Code Playgroud)
这个代码在SQL中运行良好,具有预期的结果,但是当我试图在C#上复制它时,我不知道如何做OR部分,这是我到目前为止所做的:
var Select = (from A in context.Table_A
from B in context.Table_B
from E in context.NotasQLs
from D in context.Attributes
where (String.Compare(A.ID, B.ID, true) == 0 &&
String.Compare(B.AppID, D.AppID, true) == 0
&&
(String.Compare(A.Not1, E.CODE, true) == 0 ||
String.Compare(A.Not2, E.CODE, true) == 0))
Run Code Online (Sandbox Code Playgroud)
我有一个应用程序运行时已过期,因为查询没有选择任何内容,如果我删除或条件运行但我需要OR.
我不确定IN子句的功能,因此我想知道是否可以安全地运行查询。据我了解,在SQL Server中使用IN子句时会创建一系列OR语句:例如
SELECT * FROM table WHERE column IN (1, 2, 3, 4, 5, 6)
Run Code Online (Sandbox Code Playgroud)
将与以下相同:
SELECT * FROM table WHERE column = 1 OR column = 2 OR column = 3 OR column = 4 OR column = 5 OR column = 6
Run Code Online (Sandbox Code Playgroud)
但是,当执行这样的操作时会发生什么:
SELECT * FROM table WHERE column IN (1, 2, 3) and column2 IN (4,5,6) and column 3 IN (5,7,8)
Run Code Online (Sandbox Code Playgroud)
在这里我想知道,例如,如果第一个IN中的某个值在第二个IN中有两次出现,它将检索两个结果,还是按1、4和5的顺序执行(IN子句中的第一个值)
我想用8个参数运行查询,需要在数据库中检查(通过C#发送),但我不想用很多OR这样构建一个超大型查询(因为它将是+ 90k记录)
SELECT * FROM table WHERE (column = 1 and column2 = 4 and …Run Code Online (Sandbox Code Playgroud)