【问题标题】:How do I write SELECT FROM myTable WHERE id = (SELECT) in Linq?如何在 Linq 中编写 SELECT FROM myTable WHERE id = (SELECT)?
【发布时间】:2018-10-23 09:47:44
【问题描述】:

如何在 LINQ 中使用 lambda 表达式重写此 SQL 查询?

SELECT 
    CO.* 
FROM 
    COMPANY CO 
WHERE 
    CO.ID = '5' 
    AND CO.ID <> (SELECT COMPANY_ID 
                  FROM dbo.EMPLOYEE 
                  WHERE USERNAME = 'ADMIN')

我尝试了以下代码我认为它是正确的,但它不起作用:

var obj1 = db.COMPANies
             .Where(co =>  co.ID != co.EMPLOYEEs.SingleOrDefault(em => em.USERNAME == userName).COMPANY_ID && co.ID == iID);

你能帮帮我吗?

我可以用吗

co.EMPLOYEEs.SingleOrDefault(em => em.USERNAME == userName).COMPANY_ID

在db.COMPANies.Where 内??

我已阅读以下问题:How do I write SELECT FROM myTable WHERE id = (SELECT) in Linq? 但这对我没有帮助。

编辑: Image table structure, Click here

对不起,我的英语不好。谢谢!

【问题讨论】:

  • 你能分享你的表结构吗?我认为您在公司和员工表之间存在某种对外关系。通过USERNAME 加入似乎是一种不好的做法。在表之间添加正常关系可能会简化您当前的问题。
  • 是的。请刷新页面。我不知道在这里添加图片

标签: c# sql linq lambda


【解决方案1】:

我希望您拥有COMPANY 表和EMPLOYEE 表的对象,它们将包含数据。在这些对象上,您可以触发以下 LINQ 来实现您的结果。

COMPANY.Select(x => x.Id == 5 && x.Id != EMPLOYEE.Where(z => z.USERNAME == "ADMIN").Select(g => g.COMPANY_ID).FirstOrDefault());

别忘了加using System.Linq;

【讨论】:

  • 是的,它工作正常。谢谢 。我能理解你的想法:D。但是,我们可以在 COMPANY.Select ( x => ) 中使用 x.EMPLOYEE.Where ?因为我看到 EMPLOYEE 可以从 x 调用?感谢您的良好反馈
【解决方案2】:

使用 lambda 表达式,你可以试试这个

var comapaniesWhereUserIsAdmin = from e in db.EMPLOYEEs
                                 where e.username='Admin'
                                 select e.CompanyId;
var result = from c in db.Companies 
             where c.ID == iID && !comapaniesWhereUserIsAdmin.Contains(c.ID) 
             select c;

【讨论】:

  • 谢谢。我能理解你的想法。这也是一个很好的参考
猜你喜欢
  • 2010-09-07
  • 2012-12-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-27
  • 2017-09-27
  • 2011-04-06
  • 1970-01-01
相关资源
最近更新 更多