SS OrmLite:加入和过滤列名时列名不明确
SS OrmLite: Ambiguous column name when joining and filtering on the column name
我有两个表(代码优先),它们共享一个公共列名称“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 子句导致了问题,因为它过滤了两个表中具有相同名称的列。我已经尝试 not 使用 Sql.In
,但没有帮助。
在 C# 内部,我指的是哪个对象没有歧义,编译器知道它是 Process 而不是 Activity,但是当涉及到 SQL 时,它就不再起作用了。
如何解决?
始终在查询开始时指定您的联接,即在 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);
我有两个表(代码优先),它们共享一个公共列名称“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 子句导致了问题,因为它过滤了两个表中具有相同名称的列。我已经尝试 not 使用 Sql.In
,但没有帮助。
在 C# 内部,我指的是哪个对象没有歧义,编译器知道它是 Process 而不是 Activity,但是当涉及到 SQL 时,它就不再起作用了。
如何解决?
始终在查询开始时指定您的联接,即在 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);