c# - 如何使用 Linq "NOT IN"

标签 c# .net linq

我正在使用 Entity Framework
所以我想使用两个表编写一个 sql 命令 - tblContractor 和 tbSiteByCont 表。 在 SQL 中看起来像这样

SELECT     PKConID, Fname, Lname
FROM         tblContractor
WHERE     (PKConID NOT IN
                          (SELECT     FKConID
                            FROM          tbSiteByCont
                            WHERE      (FKSiteID = 13)))

但是我不知道怎么用Linq写。

我试过这样

  var query1 = from s in db.tblSiteByConts   
                        where  s.FKSiteID == id
                        select s.FKConID;


            var query = from c in db.tblContractors   
                        where c.PKConID != query1.Any()
                        select Contractor;

但这行不通。 那我应该怎么写呢?程序是什么?我是 Linq 的新手。

最佳答案

var _result = from a in tblContractor
              where !(from b in tbSiteByCont
                        where FKSiteID  == 13
                        select b.FKConID)
                        .Contains(a.PKConID)
              select a;

var siteLst = tbSiteByCont.Where(y => y.FKSiteID == 13)
                          .Select(x => x.FKConID);
var _result = tblContractor.Where(x => !siteLst.Contains(x.PKConID));

关于c# - 如何使用 Linq "NOT IN",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15424770/

相关文章:

c# - 在 C# 中使用 C++ 代码

c# - WCF 服务在多服务器环境中不起作用

c# - WPF 弹出跟随鼠标

c# - "NotSupported"属性?

asp.net - 设置 SelectedRowStyle 属性来更改所选行的背景颜色是个坏主意吗?

linq - 如何检查此 linq 查询 where 子句中的空值

c# - 将长字符串分成 60 个字符的长行但不要打断单词

c# - 从缓存表中停止 linq

asp.net-mvc - OData WCF 数据服务 - 相关数据(通过外键)在调用服务时不显示

c# - 我应该在执行定期作业的单独线程中保留 DbContext 的实例吗