如何过滤 ListItemCollection 共享点对象模型

How to filter ListItemCollection sharepoint object model

CamlQuery camlQuery = new CamlQuery();
camlQuery.ViewXml = @"<View Scope='RecursiveAll'>
                            <Query>
                            </Query>
                        </View>";
camlQuery.FolderServerRelativeUrl = folder.ServerRelativeUrl;
ListItemCollection listItems = list.GetItems(camlQuery);
clientContext.Load(listItems);
clientContext.ExecuteQuery(); 

listItems 正在获取我要过滤列表的所有 4 个文件,使用 filename.if 文件名与数据库 table 文件名匹配,然后从 listItems

中排除该项目

例如 -

4 files - 1.txt 2.txt 3.txt 4.txt
in `database` table if `1.txt and 2.txt` is present then it will match with listItems filename and need to exclude these two items from listItems.

以上只是一个示例,我有 100 个文件,我需要使用文件名进行比较,如果存在于数据库中,则从列表中排除 table。

So we listItems is having only 2 items - 3.txt 4.txt

如果没有 foreach 循环,我该如何实现?有什么我可以使用的 LINQ 或 CamlQuery 吗?

尝试将您的 caml 查询更改为类似这样的内容

@"<View Scope='RecursiveAll'>
    <Query>
    <Where>
        <Or>
            <Eq><FieldRef Name='FileLeafRef'/><Value>3.txt</Value></Eq>
            <Eq><FieldRef Name='FileLeafRef'/><Value>4.txt</Value></Eq>
        </Or>
    </Where>                            
    </Query>
</View>";

因此您可以在 FileLeafRef 字段 Equals [=12] 中查询项目=] 4.txt

但是您应该检查哪个 属性 包含您要查找的文件名。在 我的情况是我需要将 FileLeafRef 更改为 Title

因此对于文件名的动态列表,您可以在执行查询之前为每个文件名追加一个新行。也许像

// Declare the query string
var queryString = "<View Scope='RecursiveAll'><Query><Where><or>";

// For each filename, append a new <eq> element containing the relevant details
foreach (var filename in fileNames) { 
    // Process string here, eg check if its in the db or whatever you need to do
    queryString += $"<Eq><FieldRef Name='FileLeafRef'/><Value>{filename}</Value></Eq>";
}

// Append the closing tags of the rest of the query
var queryString += "</or><Where></Query></View>";

我们也可以使用 LINQ 来过滤结果。

CamlQuery camlQuery = new CamlQuery();
camlQuery.ViewXml = @"<View Scope='RecursiveAll'>
                      <Query>
                      </Query>
                  </View>";
camlQuery.FolderServerRelativeUrl = folder.ServerRelativeUrl;
ListItemCollection listItems = list.GetItems(camlQuery);
clientContext.Load(listItems);
clientContext.ExecuteQuery();

var items = listItems.Where(i => i.FieldValues["FileLeafRef"].ToString().Equals("1.txt")||i.FieldValues["FileLeafRef"].ToString().Equals("2.txt")).ToList();

要动态构建 lambda 表达式,请查看以下文章:

Build Lambda Expressions Dynamically