我仍然可以使用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")”这样的工具“试试”,看看有哪些性能问题。
快乐编码。