Sharepoint 列表检索大数据 C#

Sharepoint List retrieve large data C#

TryGetList 是否真的检索了整个列表,还是像 IQueryable ?如果我的列表有 100 万条记录,以下方法是否正确?

  var list = web.Lists.TryGetList(<LIST NAME>);


  SPListItem item = list .Items.Cast<SPListItem>().FirstOrDefault(x => x["Id"] != null && x["Id"].ToString() == id && x["Status"] != null && x["Status"].ToString().ToLower() == "active");

TryGetList 将 returns SPList 对象。如果列表存在于相应的网站中,将 return SPList 否则将 return null.

您可以直接通过ID获取ListItem。在这里你不想使用 Linq 过滤器。同样,您可以使用 Caml 查询。

按 ID 获取列表项:

SPList list = web.Lists.TryGetList(<LIST NAME>);
SPListItem item = list.GetItemById(id);

通过 Caml 查询获取列表项:

  SPList list = web.Lists.TryGetList(<LIST NAME>);
  SPListItemCollection itemsCol=list.GetItems(new SPQuery(){Query= "<Where><And><Eq><FieldRef Name='ID'/><Value Type='Counter'>"+id+"</Value></Eq><Eq><FieldRef Name='Status'/><Value Type='Text'>Active</Value></Eq></And></Where>"});
  if(itemsCol!=null && itemsCol.count>0)
  {
    SPListItem item =itemsCol.FirstOrDefault();
  }

Here 您可以下载 Caml Builder。

TryGetList 返回的 SPList 对象是一个已经具有该列表周围所有元数据的对象,但它没有列表中项目的任何数据。例如,您可以从 SPList 对象确定列表的名称,或者创建列表的时间,它不需要完成查询整个列表项集的所有工作。

当您访问 SPList 上的 Items 属性 并迭代它(就像您对 First 所做的那样)时,您 获取列表中的所有项目。 Items 属性 不是 IQueryable<T>,您在其上使用的任何 LINQ 操作都作用于拉入内存的整个集合。您显然不想仅仅为了通过 ID 获取项目而这样做。要只获得那一项,请使用 GetItemByID.