簡體   English   中英

有沒有更快的方法來執行此LINQ?

[英]Is there a faster way to do this LINQ?

我的程序中有一個循環,它循環遍歷數千個對象以找到具有特定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;
    }
}

使用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 to 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)
{
      //...
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM