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使用filename.if文件名与数据库表文件名匹配获取我要过滤列表的所有4个文件,然后从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个文件,我需要使用文件名进行比较,如果存在数据库表则从列表中排除。
So we listItems is having only 2 items - 3.txt 4.txt
如果没有foreach循环,我怎样才能做到这一点?有什么我可以使用像LINQ或CamlQuery?
答案 0 :(得分:1)
尝试将您的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 字段 Eq 字段<{1}} 或 { {1}}
但是你应该检查哪个属性包含你所追求的文件名。在
我的情况我需要将3.txt
更改为4.txt
因此,对于动态文件名列表,您可以在执行查询之前为每个文件名附加一个新行。也许像是
FileLeafRef
答案 1 :(得分:1)
我们也可以使用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表达式,请查看以下文章: