我想用Visual Query设计器创建查询,包括排序,过滤,缓存和多个strams。基本复杂的查询。
我知道我可以使用QueryString值或In-Value Provider参数化值,也可以在查询中“硬编码”。
但我的问题是如何从剃刀代码中更改一个或多个这个值
例如: 如果我像这样加载现有的查询:
var q = App.Query [“query-name];
我获得此查询的结果。 但是在这个查询中有一个“硬编码”值,例如:“完成”某些Filter, 我的问题是:
是否可以将此查询重新用作模板,然后再使用剃刀代码更改 这个硬编码的价值。 像使用QueryString或In-Value标记,但这个值 来自剃刀脚本中的其他一些逻辑。
答案 0 :(得分:1)
这是一个很好的问题,到目前为止没有人问过:)
让我们看一些基础知识:用于查询的值提供程序是一个包含值提供程序对象的特殊字典。它是在访问时创建的,可以根据需要进行修改,直到您访问查询 - 然后使用包含的属性。
是的:您可以更改现有参数(例如更改QueryString:Id将提供的内容),也可以添加自己的参数列表,例如CodeParams:Size。
要了解如何执行此操作,请查看构建配置提供程序的https://github.com/2sic/2sxc/blob/master/SexyContent/DataSources/ConfigurationProvider.cs。这是在查询之前始终运行的内容。
您应该能够通过
访问和修改字典感觉有点复杂,但它相当简单。最好检查app-factory以了解代码: https://github.com/2sic/2sxc/blob/3602461f3c4154857d84c7f6ad1a3d1e96b78ba3/Environment/Dnn7/Factory.cs
选项2:请注意,还有另一种方式: 您可以获取查询,并对其进行修改,使其不使用参数,而是使用您刚刚提供的值。这可能会让人觉得有点混乱,但是很清楚会发生什么。 基本上,系统是数据源项的链接,通常将源Out [“Default”]连接到In [“Default”]。每个数据源都有不同的类型和不同的属性。
您可以获取查询数据源,沿对象导航到正确的数据源对象,将其转换为正确的类型,然后将filter / parameter属性更改为您需要的任何内容。这可能需要相当多的摆弄,所以我不推荐它:)。