如果某个值存在于另一个表中,则筛选该表的索引列表

本文关键字:筛选 列表 索引 存在 如果 另一个 | 更新日期: 2023-09-27 17:53:59

所以我的数据库中有三个表:

项目:

    [ProjectId]               INT            IDENTITY (1, 1) NOT NULL,
    [UserId]                  NVARCHAR (128) NULL,
    [Title]                   NVARCHAR (100) NOT NULL,

应用:

    [ApplicationId]  INT             IDENTITY (1, 1) NOT NULL,
    [ProjectId]      INT             NOT NULL,
    [UserId]         NVARCHAR (128)  NOT NULL,

合同:

    [ContractId]    INT            IDENTITY (1, 1) NOT NULL,
    [ApplicationId] INT            NOT NULL,
    [CompanyId]     NVARCHAR (128) NOT NULL,
    [CVR]           NVARCHAR (128) NOT NULL,
    [StudentId]     NVARCHAR (128) NOT NULL,
    [IsSigned]      BIT            DEFAULT ((0)) NOT NULL,

MVC应用程序的工作方式是有一个项目索引(相对简单的db.Projects.ToList((方法(,学生可以应用它来创建应用程序。当员工进入他们的项目并看到学生的申请时,他会单击一个按钮来选择学生,从而在数据库中创建一个新的合同。如何修改

List<Project> projectsList = (from p in db.Projects select p).ToList(); 

以便只显示未"承包"的项目?合同具有applicationId,当可以检索应用程序时,可以从中检索projectId。应该有某种方法可以轻松地检查Contracts表中是否存在projectID,如果存在,则不应在索引中显示该项目。

如果某个值存在于另一个表中,则筛选该表的索引列表

也许您想要

List<Project> projectsList = (from p in db.Projects 
from a in db.Applications
on p.ProjectId equals a.ProjectId
from c in db.Contracts
on a.ApplicationId equals c.ApplicationId into CC
from c in CC.DefaultIfEmpty()
where c == null             
select p).ToList(); 
 List<Project> projectsList =
                db.Projects.Where(
                    p =>
                        !db.Contracts.Join(db.Applications, c => c.ApplicationId, a => a.ApplicationId,
                            (c, a) => a.ProjectId).Contains(p.ProjectId)).ToList();

答案如下:(