我还可以使用CAML进行此查询吗?

时间:2012-03-16 04:56:27

标签: c# sql sharepoint sharepoint-2010 caml

我之前有一个问题(已经解决了),为什么我被限制在CAML中的两个参数。

供参考:Trouble with OR in Sharepoint CAML

我现在想知道的是,我可以重新格式化这个CAML查询以接受5个OR参数,其中我从列表中收集所有项目,我找到了5个参数中的任何一个的匹配。

我问的原因是,我仅限于使用Sandbox解决方案Web部件的Designer部署。这些解决方案的资源非常有限,我希望尽可能提高查询效率,而且大多数LINQ解决方案都不像CAML那样有效地改变SQL调用。

1 个答案:

答案 0 :(得分:5)

是。 OR没有设定限制。 (由于CAML如何转换为SQL,最大深度约为2000个链式运算符,但这可以通过平衡查询树来增加。)

保持嵌套 OR的所需组合。我建议使用XNode / XElement和递归来创建一个“神奇地”执行此操作的函数。

请注意,嵌套非常简单(我用S-expression形式编写,也是前缀以显示发生的情况,以及中缀 C#条件等效):

1: (OR a b)                => a || b                => a || b
2: (OR (OR a b) c)         => (a || b) || c         => a || b || c
3: (OR (OR (OR a b) c) d)  => ((a || b) || c) || d  => a || b || c || d

请注意,每个新OR只是“包装”前一个表达式。

性能基于底层SQL Server数据库的性能,并根据CAML中使用的字段而有所不同。如果该字段是索引的一部分,那么对于“等于”或“范围”条件,操作非常快。即使列不是索引的一部分,对于“小”的列表,它仍然是一个非常快速的操作。

最好的办法是使用像U2U CAML Query Builder ("Windows Version")这样的工具“试试”,看看有什么性能问题,如果有的话。

快乐的编码。