【发布时间】:2018-01-11 19:49:54
【问题描述】:
我有这个 SQL 代码,我希望它转换为 ormlite - 但我不知道如何以最好的方式做到这一点。
SELECT *
FROM Job
INNER JOIN Emp ON Job.JobAnsvarID = Emp.EmpId
LEFT JOIN (SELECT JobId, MIN(TimeReg.RegDate) AS TimeMinDate FROM TimeReg WHERE RegHrs IS NOT NULL AND JournNo = 0 GROUP BY JobId) AS t ON t.JobId = Job.JobID
WHERE NOT (t.TimeMinDate IS NULL)
我知道我可以使用 CustomJoin 和 UnsafeWhere,但如果可能的话,我想避免使用硬编码文本。
现在我有这个,但我想再次避免硬编码文本。
var ev = Db.From<Job>();
ev.CustomJoin("LEFT JOIN (SELECT {TimeReg.JobId}, MIN({TimeReg.RegDate}) AS MinDate FROM {TimeReg} WHERE {TimeReg.RegHrs} IS NOT NULL AND {TimeReg.JournNo} = 0 GROUP BY {TimeReg.JobId}) AS t ON t.JobId = {Job.JobID}"
.ReplaceAll("{Job.JobID}", GetQuotedColumnName<Job>(x => x.Id, true))
.ReplaceAll("{TimeReg.JobId}", GetQuotedColumnName<TimeRegDTO>(x=>x.JobId, true))
.ReplaceAll("{TimeReg.RegDate}", GetQuotedColumnName<TimeRegDTO>(x => x.RegistrationDate, true))
.ReplaceAll("{TimeReg.RegHrs}", GetQuotedColumnName<TimeRegDTO>(x => x.Hours, true))
.ReplaceAll("{TimeReg.JournNo}", GetQuotedColumnName<TimeRegDTO>(x => x.JournalNumber, true))
.ReplaceAll("{TimeReg}", GetQuotedTableName<TimeRegDTO>()));
GetQuotedColumnName 只需从 DTO 中获取别名并使用它
【问题讨论】:
标签: c# servicestack ormlite-servicestack