我最近开始使用Simple.Data作为我的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
。
有没有办法按联接表中的值过滤此查询?
答案 0 :(得分:0)
几乎是正确的:
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);
答案 1 :(得分:0)
如果您在Candidates
和CandidateProfiles
表之间的数据库中定义了外键并且它是左连接,我猜您可以写(未测试):
db.dbo.Candidates
.FindAllBy(CommonOfferId: commonOfferId)
.Where(db.dbo.Candidates.CandidateProfiles.CandidateId==null)
.Select(
db.dbo.Candidates.Id,
db.dbo.Candidates.Email);
代码中的主要缺失部分是.Candidates
前面的.CandidateProfiles
。这就是你在Simple.Data中表达左连接的方式,你可以用这种方式连接多个级别。它非常富有表现力,恕我直言,它是Simple.Data的最佳功能之一。