【发布时间】:2021-11-18 16:30:18
【问题描述】:
我尝试编写此代码以使用SELECT DISTINCT ON:
var q = Db.From<WatchedUrlScanResult>();
q.Join<WatchedUrlRecord>()
.Where<WatchedUrlRecord>(x => x.TargetDomainRecordId == request.TargetDomainId)
.And(x => x.ScanDate < fromEnd)
.OrderBy(x => x.WatchedUrlRecordId)
.OrderByDescending(x => x.ScanDate);
q.SelectExpression = q.SelectExpression.Replace("SELECT",
$"SELECT DISTINCT ON ({q.Column<WatchedUrlScanResult>(x => x.WatchedUrlRecordId)})");
var fromSnapshot = Db.Select<WatchedUrlScanResult>(q);
在调试器中,它显示为SelectExpression 设置的值,但实际运行的SQL 只是SELECT,没有DISTINCT ON。
我试过了:
q.Select(q.SelectExpression.Replace("SELECT",
$"SELECT DISTINCT ON ({q.Column<WatchedUrlScanResult>(x => x.WatchedUrlRecordId)})"));
但我明白了:
检测到潜在的非法片段
是否可以在不将完整查询变为字符串的情况下执行此操作? (在完整的字符串查询中使用{q.Column<Table>(x => x.ColumnName)} 很好,但与流畅的语法相比不是很可读)
【问题讨论】:
标签: servicestack ormlite-servicestack