运算符"AND""OR"SQL

She*_* Sh 2 c# sql linq sql-server entity-framework

您好我正在尝试使用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.

Net*_*age 6

用于将SQL转换为LINQ查询理解:

  1. 将子FROM选择转换为单独声明的变量.
  2. 翻译在LINQ子句顺序每个子句,翻译一元和聚集操作符(DISTINCT,TOP,MIN,MAX等等)转换成适用于整个LINQ查询功能.
  3. 使用表别名作为范围变量.使用列别名作为匿名类型字段名称.
  4. 对多列使用匿名类型(new {... }).
  5. JOIN那是不是所有的平等与测试条件AND必须用处理where条款之外的加入,或跨产品(from... from...),然后where
  6. JOINAND应将两个表之间的多个ed相等测试条件转换为匿名对象
  7. LEFT JOIN通过使用模拟into joinvariable做一套从fromjoinvariable其次.DefaultIfEmpty().
  8. 替换COALESCE为条件运算符(?:)和null测试.
  9. 翻译IN.Contains()NOT IN!... Contains().
  10. 翻译X BETWEEN AND <= X && X <= .
  11. SELECT * 必须替换为select range_variable或者连接,包含所有范围变量的匿名对象.
  12. SELECT字段必须替换为select new {... }创建一个包含所有所需字段或表达式的匿名对象.
  13. FULL OUTER JOIN必须使用扩展方法处理正确的.

所以对于你的查询,

var ans = from N in Table_A
          join A in Table_B on N.ID equals A.ID
          from G in NotasQL
          where G.CODE == N.Not1 || G.CODE == N.Not2
          join X in Attributes on A.AppID equals X.AppID
          select new {
              N.Name,
              N.Unit,
              N.Typee,
              N.ID, // ??? not sure table for this column
              G.NOTE // ??? not sure table for this column
          };
Run Code Online (Sandbox Code Playgroud)