SharePoint CAML查询的最大大小

3
我正在运行一个SharePoint CAML查询,想要检查一个项目上的字段是否等于许多值中的一个。我动态地执行此操作,可能希望检查数百个值。
当我使用780个OR元素执行查询时,我发现出现了与服务器内存相关的错误。显然,这在不同环境下是可变的,但我正在寻找一些指导方针,建议我应该限制最大查询长度。
谢谢!

2
耶稣基督,780个OR语句!?我不敢想象需要多少层嵌套。肯定有更好的方法来实现你想要做的事情... - James Love
我有一个包含许多文件夹的列表(这些文件夹是出于安全目的而需要的)。每个文件夹中可能有许多项。我想运行这样一个查询:获取800个文件夹中的600个文件夹的所有项目。我目前是通过检查具有非常大嵌套OR Caml查询的项目上的FileRef字段来执行此操作。如果您有更好的建议,请务必告诉我。 - Paul
图书馆里大约有多少项内容?每个文件夹里呢? - Kit Menke
另外,您能详细说明您想要做什么吗?听起来我们可能可以推荐更好的方法。 - Kit Menke
2个回答

2
如何使用ContentIterator? 它支持递归遍历一组项目并对其进行某些操作。 以下代码将“FeatureId”属性与特定值匹配的样式库文件全部发布: http://community.zevenseas.com/Blogs/Robin/Lists/Posts/Post.aspx?ID=122
SPList styleLibrary = rootWeb.Lists.TryGetList("Style Library");
SPFolder folder = styleLibrary.RootFolder;
ContentIterator ci = new ContentIterator();
ci.ProcessFilesInFolder(
    styleLibrary,
    folder,
    true,
    new ContentIterator.FileProcessor((SPFile f) =>
    {
        // Check the FeatureId property the file's been "stamped" with
        if (f.Properties.ContainsKey("FeatureId"))
        {
            if (String.Equals(f.Properties["FeatureId"] as string, featureId, StringComparison.InvariantCultureIgnoreCase))
            {
                if (f.Level == SPFileLevel.Checkout)
                    f.CheckIn(String.Empty, SPCheckinType.MajorCheckIn);
                if (f.Level == SPFileLevel.Draft)
                    f.Publish("");
            }
        }
    }),
    new ContentIterator.FileProcessorErrorCallout((SPFile f, Exception Ex) =>
    {
        //Define the action I need to do if an error occur
        return false;
    }));

那会完美地解决我的问题 - 但不幸的是我必须在MOSS的限制下工作;内容迭代器是SharePoint 2010的功能。我应该已经说明了。仍然+1。 - Paul
@Paul,对不起,我应该先问一下!谢谢。 - Eccentropy

1
您可以通过SPList.Folders获取所有文件夹,遍历这些文件夹并按照需要进行筛选...

这是我试图避免的情况:它需要查询每个文件夹,因此效率低下。最好直接获取SPList.Items并过滤集合。 - Paul
SPList.Folders 会递归返回每个文件夹,包括子文件夹,因此不需要单独查询每个文件夹。 - Matthias

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接