共享点列表检索大数据C#

时间:2018-08-05 10:25:13

标签: c# sharepoint sharepoint-2013 splistitem splist

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");

2 个答案:

答案 0 :(得分:1)

TryGetList将返回SPList对象。如果该列表存在于相应的网站中,则将返回SPList,否则将返回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。

希望这会对您有所帮助。

答案 1 :(得分:0)

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

当您访问Items上的SPList属性并对其进行迭代时(就像对First所做的那样),您获取所有项在列表中。 Items属性不是IQueryable<T>,您在该属性上使用的任何LINQ操作都作用于整个集合,这些集合被拉入内存。您显然不希望仅通过ID来获取商品。要仅获取一项,请使用GetItemByID