将自动查询查询字符串转换为SqlExpression

时间:2018-11-05 20:44:58

标签: servicestack

我正在尝试在服务请求之外重新创建自动查询。我这样做是因为我给了用户选项以保存请求,然后在其他地方使用该数据。我保存了查询字符串数据,因此尝试从保存的查询字符串创建查询。

我需要两件事。

1)查询返回不受默认自动查询页面大小限制的完整数据

2)返回计数的查询

我试图这样查询:

IAutoQueryDb _autoQuery = HostContext.TryResolve<IAutoQueryDb>();
var dto = new MyQueryDbClass();
Dictionary<string, string> pars = GetParameters();

var query = _autoQuery.CreateQuery(dto, pars);

此问题是所生成的查询具有响应对象的表名,而不是实际的表,因此它不起作用。另外,我无法在其上致电ToCountSatement()。它也受我的默认页面大小的限制。

是否可以将自动查询查询字符串转换为SqlExpression,以便我可以执行它并获得count语句?

1 个答案:

答案 0 :(得分:1)

CreateQuery() API返回一个填充的SqlExpression<Table>,类似于如果您自己手动构建查询,则会创建的内容,例如:

SqlExpression<Table> query = _autoQuery.CreateQuery(dto, pars);

要清除分页信息,您可以调用不带参数的.Limit(),该参数将清除所有填充的偏移/行值:

query.Limit();

Custom AutoQuery Implementations文档显示了一个AutoQuery示例,该示例在后台执行查询,例如您可以通过以下方式获得总数:

var total = Db.Count(query);