从连接表中按列筛选
本文关键字:筛选 连接 | 更新日期: 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);
如果您在Candidates
和CandidateProfiles
表之间的数据库中定义了外键,并且它是左连接,我想你可以只写(未测试):
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中表达左连接的方式。数据,你可以通过这种方式连接多个级别。它非常富有表现力,我个人认为它很简单。数据的最佳特性。