将 AutoQuery 查询字符串转换为 SqlExpression
Convert AutoQuery query string to SqlExpression
我正在尝试在服务请求之外重新创建 AutoQuery 查询。我这样做是因为我为用户提供了保存请求然后在其他地方使用该数据的选项。我保存了查询字符串数据,因此我尝试从保存的查询字符串创建查询。
我需要两样东西。
1) 查询returns完整数据默认不限制自动查询页面大小
2) 查询returns 计数
我试过这样查询:
IAutoQueryDb _autoQuery = HostContext.TryResolve<IAutoQueryDb>();
var dto = new MyQueryDbClass();
Dictionary<string, string> pars = GetParameters();
var query = _autoQuery.CreateQuery(dto, pars);
问题是生成的查询具有响应对象的 table 名称,而不是实际的 table,因此它不起作用。我也无法在其上调用 ToCountSatement()
。它也受限于我的默认页面大小。
有没有办法将 AutoQuery 查询字符串转换为 SqlExpression
以便我可以执行它并获取计数语句?
CreateQuery()
API returns 填充的 SqlExpression<Table>
类似于您自己手动构建查询时创建的内容,例如:
SqlExpression<Table> query = _autoQuery.CreateQuery(dto, pars);
要清除分页信息,您可以不带参数调用 .Limit()
,这将清除任何填充的 Offset/Rows 值:
query.Limit();
Custom AutoQuery Implementations 文档显示了 AutoQuery 在幕后执行查询的示例,例如您可以通过以下方式获得总数:
var total = Db.Count(query);
我正在尝试在服务请求之外重新创建 AutoQuery 查询。我这样做是因为我为用户提供了保存请求然后在其他地方使用该数据的选项。我保存了查询字符串数据,因此我尝试从保存的查询字符串创建查询。
我需要两样东西。
1) 查询returns完整数据默认不限制自动查询页面大小
2) 查询returns 计数
我试过这样查询:
IAutoQueryDb _autoQuery = HostContext.TryResolve<IAutoQueryDb>();
var dto = new MyQueryDbClass();
Dictionary<string, string> pars = GetParameters();
var query = _autoQuery.CreateQuery(dto, pars);
问题是生成的查询具有响应对象的 table 名称,而不是实际的 table,因此它不起作用。我也无法在其上调用 ToCountSatement()
。它也受限于我的默认页面大小。
有没有办法将 AutoQuery 查询字符串转换为 SqlExpression
以便我可以执行它并获取计数语句?
CreateQuery()
API returns 填充的 SqlExpression<Table>
类似于您自己手动构建查询时创建的内容,例如:
SqlExpression<Table> query = _autoQuery.CreateQuery(dto, pars);
要清除分页信息,您可以不带参数调用 .Limit()
,这将清除任何填充的 Offset/Rows 值:
query.Limit();
Custom AutoQuery Implementations 文档显示了 AutoQuery 在幕后执行查询的示例,例如您可以通过以下方式获得总数:
var total = Db.Count(query);