首页 > 解决方案 > 将 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 语句?

标签: servicestack

解决方案


如果您自己手动构建查询, 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);

推荐阅读