ServiceStack, LeftJoin query(ServiceStack,LeftJoin查询)
问题描述
我有此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获取别名并使用
推荐答案
没有类型化的OrmLite没有用于子查询的自定义联接的接口IN SubSelect queries。
我将只使用C#字符串内插来代替HTML,还有一种更简单的类型化方法可以使用nameof
,例如:
var q = Db.From<Job>();
q.CustomJoin($"LEFT JOIN (SELECT {nameof(Job.Id)} ...")
如果您的属性没有别名或者您正在使用自定义命名约定,您将能够使用它。
另外,为了使用例更好一些,我在this commit中添加了新的.Column<Table>()
和.Table<T>()
扩展方法,这将允许您在自定义SQL中使用类型化API,例如:
q.CustomJoin($"LEFT JOIN (SELECT {q.Column<Job>(x => x.Id)} ...")
q.CustomJoin($"LEFT JOIN (SELECT {q.Column<Job>(nameof(Job.Id))} ...")
q.CustomJoin($"LEFT JOIN (SELECT {q.Column<Job>(x => x.Id, tablePrefix:true)} ...")
//Equivalent to:
q.CustomJoin($"LEFT JOIN (SELECT {q.Table<Job>()}.{q.Column<Job>(x => x.Id)} ...")
从现在的available on MyGetv5.0.3开始提供此更改。
这篇关于ServiceStack,LeftJoin查询的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:ServiceStack,LeftJoin查询


- WebMatrix WebSecurity PasswordSalt 2022-01-01
- 如何用自己压缩一个 IEnumerable 2022-01-01
- MoreLinq maxBy vs LINQ max + where 2022-01-01
- C# 中多线程网络服务器的模式 2022-01-01
- Web Api 中的 Swagger .netcore 3.1,使用 swagger UI 设置日期时间格式 2022-01-01
- 输入按键事件处理程序 2022-01-01
- 带有服务/守护程序应用程序的 Microsoft Graph CSharp SDK 和 OneDrive for Business - 配额方面返回 null 2022-01-01
- 在哪里可以找到使用中的C#/XML文档注释的好例子? 2022-01-01
- 良好实践:如何重用 .csproj 和 .sln 文件来为 CI 创建 2022-01-01
- C#MongoDB使用Builders查找派生对象 2022-09-04