有没有更快的方法来执行此操作 LINQ

本文关键字:执行 操作 LINQ 方法 有没有 | 更新日期: 2023-09-27 18:34:02

我的程序里有一个循环,它循环遍历数千个对象以找到具有特定ID的正确对象。有没有比这更好更快的方法

int id;
SPList list = SPContext.Current.Web.Lists.TryGetList("DataLibrary");
IEnumerable<SPListItem> _dataitems = list.Items.OfType<SPListItem>();
foreach (SPListItem item in _dataextantitems)
{
    if (item.ID == id)
    {
        title= item.Title;
    }
}

有没有更快的方法来执行此操作 LINQ

使用 SPListGetItemById

var title = SPContext.Current.Web.Lists["DataLibrary"].GetItemById(id).Title;

如果您的列表包含大量列,并且您希望避免将它们全部下拉,则可以下拉Title列:

var title = SPContext.Current.Web.Lists["DataLibrary"]
    .GetItemByIdSelectedFields(id, "Title").Title;

现在,如果你真的想在这里使用LINQ,你可以使用LINQ到Sharepoint,但它实际上不会简化代码。 使用 SPMetal .exe 根据列表生成文件后,您将能够编写:

using(var context = new YourContextNameHere(SPContext.Current.Site.Url))
{
    var title = context.DataLibrary
        .Where(item => item.ID == id)
        .Select(item => item.Title)//to avoid pulling down other columns
        .First();
}

确保您的列表已排序。然后,可以使用列表的 BinarySearch 方法或编写自己的实现。如果没有,您可以使用 linq 缩短代码。

var itemToLookup = list.Items.OfType<SPListItem>().FirstOrDefault(x => x.ID == id);
if (itemToLookup != null)
{
      //...
}