从连接表中按列过滤

时间:2015-07-17 12:52:23

标签: c# tsql simple.data

我最近开始使用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

有没有办法按联接表中的值过滤此查询?

2 个答案:

答案 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)

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

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的最佳功能之一。