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");
答案 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
。