在Sharepoint列表中获取第一个和最后一个列表项

11

pageLoad事件中,我想要访问两个不同的SharePoint列表,并获取其中一个列表的第一个ListItem和另一个列表的最后一个ListItem。 我不知道任何ListItem ID,所以我猜这需要通过列表索引来完成 - 只是不确定如何实现。一旦已经获得了列表的处理,有人可以使用c#建议获取上述情况的第一个和最后一个项目的最佳方法吗?

2个回答

18

“第一项”和“最后一项”的条件不太清晰。假设您想检索第一个和最新创建的项目。需要注意的是,通过SPListItemCollection的索引检索项目对于大型列表可能会很慢,因为访问SPList.Items返回列表的所有项目。这就是为什么我建议使用CAML查询:

SPList list = // some list;
SPQuery query = new SPQuery();
query.RowLimit = 1;
query.Query = "<OrderBy><FieldRef Name='ID' /></OrderBy>";

return list.GetItems(query).Cast<SPListItem>().FirstOrDefault();

对于“最后一项”,您需要反转排序:

<OrderBy><FieldRef Name='ID' Ascending='FALSE' /></OrderBy>

如果你想根据另一个条件获取最后一个和第一个项目,只需要按照另一个字段改变排序顺序。

更新:
更好的方法是按照ID字段排序。这样也可以实现相同的结果。正如@Kobi指出的那样,不仅如此,创建的字段还可以通过代码进行更改。


1
非常好。我还建议使用ID,"created"日期可以通过代码设置。此外,如果列表很小,我不确定是否需要查询。 - Kobi

2
你可以尝试这个方法来获取最后一个itemID。
SPWeb web = SPContext.Current.Web;
            SPList List = web.Lists[ListName];

            int itemId = List.Items[List.ItemCount - 1].ID;

Regards!


这对我非常有帮助。我需要在已排序的SPListCollection上执行一些操作,并且在跨越它们之前需要最后一个项目的值。这使我能够在不编写额外的CAML查询的情况下完成它。谢谢! - Chronozoa
已删除的项目ID怎么办?! - Mostafa Mohamed Ahmed
因为只是猜测最后一个项目的ID,所以被踩了。 - Jarek Danielak

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接