c# – Simple.Data ORM.多部分标识符无法绑定

我正在使用Simple.Data ORM.我试图从两个连接的表中进行查询.这个查询工作正常:
dynamic alias;
var candidatesRec = db.dbo.Candidates
            .FindAll(db.dbo.Candidates.CommonOfferId == commonOfferId 
                        && db.dbo.CandidateProfiles.CandidateId == null)
            .LeftJoin(db.dbo.CandidateProfiles,out alias)
            .On(db.dbo.Candidates.Id == alias.CandidateId)
            .Select(
                db.dbo.Candidates.Id,db.dbo.Candidates.Email
            )
            .OrderByDescending(db.dbo.Candidates.ApplicationDate)

但是当添加此行时:

.Skip((pageNumber - 1) * pageSize)

我得到这个例外:

The multi-part identifier \”dbo.CandidateProfiles.CandidateId\” Could
not be bound.

我试图明确地通过0,1和其他几个数字跳过,但我总是得到相同的例外.

我的测试查询应该返回4个元素,我正在跳过0个元素(它可以在正常使用中更多).

附加信息:CandidateProfiles有来自候选人的外键,它的CandidateId可以为空.

编辑:我们已经解决了这个问题,但我真的好奇为什么这个不行. Simple.Data首先看起来很有趣,但现在我不知道我将来会使用它

解决方法

以下是从 http://www.sql-server-helper.com/error-messages/msg-4104.aspx sql语句的解释:

Another way of getting the error is when an alias has been assigned to
a table referenced in the FROM clause of a statement and the table is
used as a prefix of a column instead of using the alias.

虽然这不是你的情况发生的情况,但是非常接近.我在代码示例中看到的问题在FindAll调用中:

.FindAll(db.dbo.Candidates.CommonOfferId == commonOfferId 
                    && db.dbo.CandidateProfiles.CandidateId == null)
        .LeftJoin(db.dbo.CandidateProfiles,out alias)

由于FindAll正在使用完全限定名称“db.dbo.CandidateProfiles”,而每个其他引用都使用随后的LeftJoin中定义的别名,所生成的where子句中的事件不会使用别名,而您最终会使用混合和匹配别名和显式表引用,sql不喜欢.

我认为只有在“跳过”之后才发生这种情况的原因是,最终生成了非常不同的sql(我的猜测是,只有在添加了“跳过”之后,实际使用了别名).

我不明白CandidateProfiles.CandidateId == null条件的目的(因为结合在On调用中的条件我看不到这将返回任何结果),但我建议添加限制到连接的表在On调用中,使它最终在on子句而不是where子句(然后使用别名而不是完全限定名)

.LeftJoin(db.dbo.CandidateProfiles,out alias)  
.On(db.dbo.Candidates.Id == alias.CandidateId && alias.CandidateId == null)

相关文章

目录简介使用JS互操作使用ClipLazor库创建项目使用方法简单测...
目录简介快速入门安装 NuGet 包实体类User数据库类DbFactory...
本文实现一个简单的配置类,原理比较简单,适用于一些小型项...
C#中Description特性主要用于枚举和属性,方法比较简单,记录...
[TOC] # 原理简介 本文参考[C#/WPF/WinForm/程序实现软件开机...
目录简介获取 HTML 文档解析 HTML 文档测试补充:使用 CSS 选...