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&lt;T&gt;():

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:加入和过滤列名时的列名不明确的主要内容,如果未能解决你的问题,请参考以下文章

使用 EF Core 过滤包含时的列名无效

将 ORMLite 与 Oracle 一起使用时,列名不是大写

左外连接代码的不明确列名

4.mybatis属性和表的列名不相同时的处理方法

laravel 雄辩的数据透视表查询“不明确的列名”

使用 JOIN 进行 SQL Server 分页 - 列名“id”不明确