【发布时间】:2021-11-03 18:32:25
【问题描述】:
我有以下课程:
public class ProcessInstance
{
[AutoIncrement]
public int Id { get; set; }
[Reference]
public ProcessDefinition ProcessDefinition { get; set; }
public int ProcessDefinitionId { get; set; }
// and more...
}
然后运行以下,这对我来说很好:
var q = db.From<ProcessInstance>().Where(inst => inst.ProcessDefinition.Id == id
&& Sql.In(inst.Status, enProcessStatus.READY, enProcessStatus.ACTIVE));
return db.Exists(q);
当我从“db”对象中检查最后一个命令文本 SQL 时,它是错误的:
SELECT 'exists'
FROM "ProcessInstance"
WHERE (("Id" = @0) AND "Status" IN (@1,@2))
LIMIT 1
请注意,它过滤的是Id 而不是ProcessDefinition.Id,这当然是错误的。不知道为什么会这样——至少我会很高兴得到一个错误而不是一个错误的结果。
但是,我找到了解决方法:使用 ProcessDefinitionId:Where(inst => inst.ProcessDefinitionId == id 给出正确的 SLQ:
SELECT 'exists'
FROM "ProcessInstance"
WHERE (("ProcessDefinitionId" = @0) AND "Status" IN (@1,@2))
LIMIT 1
为什么第一个不起作用?为什么没有错误?
【问题讨论】:
标签: servicestack ormlite-servicestack