SS OrmLite:加入和过滤列名时的列名不明确
Posted
技术标签:
【中文标题】SS OrmLite:加入和过滤列名时的列名不明确【英文标题】:SS OrmLite: Ambiguous column name when joining and filtering on the column name 【发布时间】:2021-11-20 12:05:40 【问题描述】:我有两个表(代码优先),它们共享一个共同的列名“状态”,顺便说一句,它在 Where 子句中使用。
这会导致不明确的列错误。
var q = db.From<Process>()
.Where<Process>(p => Sql.In(p.Status, enProcessStatus.READY, enProcessStatus.ACTIVE))
.Join<Activity>()
db.SelectMulti<Process,Activity>(q);
当我使用SelectMulti
时,错误也会出现在常规Select
中(仅用于调试目的)。
我发现是 Where 子句导致了问题,因为它过滤了两个表中具有相同名称的列。我尝试过不使用Sql.In
,但没有帮助。
在 C# 内部,我所指的对象没有歧义,编译器知道它是 Process 而不是 Activity,但是当涉及到 SQL它不再起作用了。
如何解决?
【问题讨论】:
【参考方案1】:始终在查询开始时指定联接,即紧接着From<T>()
:
var q = db.From<Process>()
.Join<Activity>()
.Where<Process>(p => Sql.In(p.Status, enProcessStatus.READY));
var results = db.SelectMulti<Process,Activity>(q);
【讨论】:
以上是关于SS OrmLite:加入和过滤列名时的列名不明确的主要内容,如果未能解决你的问题,请参考以下文章