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

问题描述:

我之前有一个问题(这个问题已经解决了),为什么我只限于CAML中的两个参数。我仍然可以使用CAML进行此查询吗?

参考:Trouble with OR in Sharepoint CAML

我现在想知道的是,我能格式化该CAML查询,接受5个或参数,我在那里收集来自列表中的所有项目在那里我找到一个匹配任何5参数。

我之所以问,我仅限于沙盒解决方案Web部件的设计部署。这些解决方案的资源非常有限,我希望尽可能有效地查询,大多数LINQ解决方案不会像CAML那样有效地改变SQL调用。

是。 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")”这样的工具“试试”,看看有哪些性能问题。

快乐编码。