C# Sharepoint列表检索大型数据C
TryGetList实际上是检索整个列表还是像IQueryable一样工作?如果我的名单上有100万条记录,下面的方法对吗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
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();
}