c# - 运算符 "AND" "OR"SQL

标签 c# sql sql-server entity-framework linq

<分区>

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

此代码在 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))

我的应用程序运行时已过期,因为查询没有选择任何内容,如果我删除了 or 条件运行但我需要 OR。

最佳答案

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

  1. 翻译 FROM子选择作为单独声明的变量。
  2. 翻译 LINQ 子句顺序中的每个子句,将单子(monad)和聚合运算符(DISTINCTTOPMINMAX 等)翻译成应用于整个 LINQ 查询的函数。
  3. 使用表格别名作为范围变量。使用列别名作为匿名类型字段名称。
  4. 对多列使用匿名类型 ( new { ... } )。
  5. JOIN AND 并非所有相等性测试的条件必须使用 where 处理联接外部的子句,或使用叉积 (from ... from ...) 然后 where
  6. JOIN多个条件 AND两个表之间的 ed 相等性测试应翻译成匿名对象
  7. LEFT JOIN使用 into 模拟joinvariable 并从 from 做另一个joinvariable 后跟 .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
          };

关于c# - 运算符 "AND" "OR"SQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48956548/

相关文章:

java - 如何使用 Microsoft JDBC 驱动程序获取 Velocity 从数据源检索模板?

c# - 从 C# CLR 快速插入

sql-server - NHibernate 不会持久化 DateTime SqlDateTime 溢出

c# - 如何在 C# 中使用 DBContext 编写动态 LINQ 查询

c# - 在 C# 中解析 XML

mysql - 检索具有最大值的所有行

sql - 禁用 Rails 3.2.x 中的查询日志以进行开发?

c# - Xamarin - 将图像转换为字节数组

c# - Xamarin 表单添加对 Web 服务的引用

sql - 删除 postgresql (SQL) 中的方括号