我有两个表(代码优先),它们共享一个公共(public)列名“Status”,顺便在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 时,编译器知道它是 Process,而不是 Activity。它不再起作用了。
如何解决这个问题?
最佳答案
始终在查询开始时指定您的联接,即紧接着 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);
关于servicestack - SS OrmLite : Ambiguous column name when joining and filtering on the column name,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69361869/