从连接表中按列筛选

本文关键字:筛选 连接 | 更新日期: 2023-09-27 18:03:08

我最近开始使用Simple。数据作为我的ORM。我遇到了一个从连接表中按列过滤的问题。

我的查询是这样的:

var candidates = db.dbo.Candidates
            .FindAllBy(CommonOfferId: commonOfferId, CandidateId: null)
            .Select(
                db.dbo.Candidates.Id,
                db.dbo.Candidates.Email,
                db.dbo.CandidateProfiles.CandidateId
            ).LeftJoin(db.dbo.CandidateProfiles).On(db.dbo.Candidates.Id == db.dbo.CandidateProfiles.CandidateId);

我想选择在另一个表中没有id的实体。这个代码不能工作。我得到一个例外,Candidates没有CandidateId列。

是否有办法从连接表中按值过滤这个查询?

从连接表中按列筛选

这几乎是正确的:

dbo.Candidates
        .FindAllBy(CommonOfferId: commonOfferId, CandidateProfiles.CandidateId: null)
        .Select(
            db.dbo.Candidates.Id,
            db.dbo.Candidates.Email,
            db.dbo.CandidateProfiles.CandidateId
        ).LeftJoin(db.dbo.CandidateProfiles).On(db.dbo.Candidates.Id == db.dbo.CandidateProfiles.CandidateId);

如果您在CandidatesCandidateProfiles表之间的数据库中定义了外键,并且它是左连接,我想你可以只写(未测试):

db.dbo.Candidates
   .FindAllBy(CommonOfferId: commonOfferId)
   .Where(db.dbo.Candidates.CandidateProfiles.CandidateId==null)
    .Select(
        db.dbo.Candidates.Id,
        db.dbo.Candidates.Email);

你的代码中主要缺失的部分是.CandidateProfiles前面的.Candidates。这就是在Simple中表达左连接的方式。数据,你可以通过这种方式连接多个级别。它非常富有表现力,我个人认为它很简单。数据的最佳特性。