C# Sharepoint列表检索大型数据C

C# Sharepoint列表检索大型数据C,c#,sharepoint,sharepoint-2013,splistitem,splist,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

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

您可以使用ID直接获取ListItem。这里您不想使用Linq筛选器。同样,您可以使用Caml查询

按ID获取列表项:

通过Caml查询获取列表项:

您可以下载Caml Builder。

TryGetList返回的SPList对象是一个对象,该对象已包含该列表周围的所有元数据,但不包含列表中项目的任何数据。例如,您可以通过SPList对象确定列表的名称,或者在创建列表时,不需要查询整个列表项集


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

太好了。但只需补充一点,您需要使用内部名称来代替ID和状态。。。
SPList list = web.Lists.TryGetList(<LIST NAME>);
SPListItem item = list.GetItemById(id);
  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();
  }