簡體   English   中英

C#對象列表過濾(Linq?)

[英]c# object list filtering (linq?)

我有一個對象列表IEnumerable<Item> ,我們稱它為Items。 Item具有屬性Item.Subitems ,它是子項的列表。 清單大約有500個項目,每個項目平均有10個子項目。

這些都是“內存中”對象(在此級別上,沒有數據庫查詢)。

我想要一個功能:

public static string GetSubitemValue( int id )
{
  return Items.SelectMany( i => i.Subitems ).FirstOrDefault( si => si.id == id).Value;
}

在一個過程調用(這是Razor視圖渲染過程的一部分)期間,函數GetSubitemValue將被多次調用(假設為500)。

是否有任何內置的linq增強功能可支持可重復列表搜索(迭代?)。 我是否應該自己做一些緩存或索引編制?

據我所知,沒有內置的機制可以增強多種類型。 但是,您可以按以下方式實現返回值的緩存。

private static Dictionary<int,string> Cache = new Dictionary<int,string>();

public static string GetSubitemValue(int id)
{
    if (!Dictionary.Contains(id))
    {
        Dictionary[id]
            = Items.SelectMany(i => i.Subitems)
                   .FirstOrDefault(si => si.id == id).Value;
    }
    return Dictionary[id];
}

但是,請注意,如果Items不包含所需的ID,則您的初始代碼段將引發異常。

暫無
暫無

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

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