【问题标题】:Converting a given SQL Query to LINQ将给定的 SQL 查询转换为 LINQ
【发布时间】:2022-01-17 11:44:03
【问题描述】:

我是创建 LINQ 的新手,因此很难将此 SQL 查询转换为 LINQ。有人可以帮我吗

SELECT *
FROM myTable1
WHERE (Flag1 <> 'X' OR Flag2 != 'X' OR Flag3 != 'X')
  AND number IN (SELECT externalid FROM db2.myTable2 WHERE item = 6)

这是我已经尝试过的

//get external id
            var externalNumber = from s in db2.myTable2
                             where s.item == 6
                             select externalid;

            var query = from f in db1.myTable1
                        where (f.Flag1 != "X" || f.Flag2 != "X" || f.Flag3 != "X") && f.number == externalNumber
                        select f;

【问题讨论】:

  • 到目前为止,YOU 尝试过什么?你在哪里卡住?我们会为您的工作提供帮助 - 但我们不会只为您编写整个代码
  • 嗨@mar​​c_s,我已经更新了上面我已经完成的声明
  • 一个好的开始是找到一个支持 LINQ 的 O/R 映射器。

标签: c# sql linq


【解决方案1】:

直接翻译是:

var query = 
    from f in db.myTable1
    where (f.Flag1 != "X" || f.Flag2 != "X" || f.Flag3 !="X") &&
        db.myTable2.Where(s => s.item == 6).Select(s => s.externalId).Contains(f.number)
    select f;

LINQ 中的IN 具有模拟Contains

【讨论】:

  • 我收到此错误“指定的 LINQ 表达式包含对与不同上下文关联的查询的引用。”
  • 您不能合并来自两个不同上下文的查询。
【解决方案2】:
var externalid = db2.myTable2Repository.FirstOrDefault(f=>f.item == 2).Result.externalid; 

第一个代码从 db2.myTable2 返回 externalid

var data = myTable1Repository.GetAll().Where(w=>(w.Flag1 != X || w.Flag2 != X || w.Flag3 != X) && w.number == externalid)

第二个代码: GetAll() 是您的存储库(或 baseRepository)的一种方法,而 Where() 是 linq 的一部分

where -> (w.Flag1 != X || w.Flag2 != X || w.Flag3 != X) 的第一部分是自我解释

第二部分 -> (&& w.number == externalid): 我对 sql 不是很好,所以第二部分可能弄错了,但是如果我理解正确,您可以对照另一个表中的值检查“数字”属性,这样您就可以查找该值并将其存储在一个变量。

对不起,如果我误解了“and number in”的第二部分,我真的不擅长SQL,而且我的英语也很差。

如果您有任何问题,我们在这里:D

【讨论】:

    【解决方案3】:

    试试下面的代码:

    DatabaseEntities dc=new DatabaseEntities();
    var res=dc.myTable1.Where(s=>s.Flag <> 'X' || Flag2 !='X' || Flag3 !='X' && s.number.Contains(dc.myTable2.Where(m=>m.item==6)))

    【讨论】:

      猜你喜欢
      • 2014-08-14
      • 1970-01-01
      • 1970-01-01
      • 2012-02-17
      • 2017-02-23
      • 2020-07-19
      • 1970-01-01
      相关资源
      最近更新 更多