检测列表是否在 SharePoint CSOM 中有任何附件

Detect if a list has ANY attachment in SharePoint CSOM

我需要阅读 SharePoint 列表中的所有项目,包括所有附件。这是代码:

foreach (var item in allItems)
{
   Dictionary<string, string> itemFilenames = GetFilenames(item.Id);
   if (itemFilenames != null && itemFilenames.Count > 0)
   {
      // [...]
   }    
}
private AttachmentCollection GetFilenames(id) { 
  List list=_context.Web.GetListByTitle("mylist");
  ListItem=list.GetItemById(id);
  var files=item.AttachmentFiles;
  _context.Load(files);
  _context.ExecuteQuery();
  return files;
}

现在我 90% 的列表根本不包含任何附件。仍然:我尝试检索每一个项目的附件,这大大降低了程序的速度。

所以我的想法是在尝试为每个项目检索附件之前检测列表是否有任何附件。所以像这样:

var list=clientContext.Web.GetListByTitle("mylist");
if (!list.ContainsAttachments) return; // <-- What I want to do
foreach (var item in allItems) { ... }

当然,"if" - 语句并不是那样工作的。但是是否有另一种方法可以查明是否存在任何会导致所需行为的附件?

TL;DR: 我想知道一个列表是否包含任何附件而不循环遍历该列表的每个项目

以下代码供大家参考。

ClientContext ctx = new ClientContext("http://sp2013/sites/team");
var web = ctx.Web;
var list = web.Lists.GetByTitle("TestStartWorkflow");
var query = new CamlQuery();
query.ViewXml = "<View Scope=\"RecursiveAll\"></View>";
var items = list.GetItems(query);
ctx.Load(items,i=>i.Include(item=>item.AttachmentFiles));
ctx.ExecuteQuery();
var flag = items.Any(i=>i.AttachmentFiles.Count>0);