[英]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.