servicestack - 将 AutoQuery 查询字符串转换为 SqlExpression
问题描述
我正在尝试在服务请求之外重新创建 AutoQuery 查询。我这样做是因为我让用户选择保存请求,然后在其他地方使用该数据。我保存了查询字符串数据,所以我试图从保存的查询字符串创建一个查询。
我需要两件事。
1) 返回完整数据的查询不受默认自动查询页面大小限制
2) 返回计数的查询
我尝试像这样进行查询:
IAutoQueryDb _autoQuery = HostContext.TryResolve<IAutoQueryDb>();
var dto = new MyQueryDbClass();
Dictionary<string, string> pars = GetParameters();
var query = _autoQuery.CreateQuery(dto, pars);
这样做的问题是生成的查询具有响应对象的表名而不是实际表,因此它不起作用。我也无法调用ToCountSatement()
它。它也受到我的默认页面大小的限制。
有没有办法将 AutoQuery 查询字符串转换为 aSqlExpression
以便我可以执行它并获取 count 语句?
解决方案
如果您自己手动构建查询, API会返回一个类似于已创建CreateQuery()
的填充内容,例如:SqlExpression<Table>
SqlExpression<Table> query = _autoQuery.CreateQuery(dto, pars);
要清除分页信息,您可以.Limit()
不带参数调用,这将清除任何填充的 Offset/Rows 值:
query.Limit();
Custom AutoQuery Implementations文档显示了 AutoQuery在后台执行查询的示例,例如,您可以通过以下方式获得总数:
var total = Db.Count(query);
推荐阅读
- c# - 如何在 c# 中使用延迟发出多个异步 HTTP 请求
- c++ - 所有 g++ 版本的 delete[] 可能存在错误或未定义此行为?
- asp.net - 带有滑动过期的 ASP.Net 外部 Cookie 显示为会话 cookie
- python - Performance of Pandas apply vs np.vectorize to create new column from existing columns
- sql - Postgres UPSERT 在更新时重用来自 INSERT 的列值
- testing - Apple - App Store Connect - 新测试员密码无效
- r - 使用 Rs mongolite 正确(插入?更新?)将数据添加到现有集合
- docker - chown 增加 docker 镜像大小
- ios - Apple Developer 帐户错误:生成的最大证书数量(开发)
- node.js - 首次加载 node.js 应用程序时出现意外令牌“<”,然后正确加载