我有一个对象列表IEnumerable<Item>
,我们称之为项目。项目有一个propoerty Item.Subitems
,它是一个子项列表。列表大约有500个项目,每个项目有10个子项目。
这些都是&#34;在记忆中&#34;对象(没有db在此级别查询)。
我想要一个功能:
public static string GetSubitemValue( int id )
{
return Items.SelectMany( i => i.Subitems ).FirstOrDefault( si => si.id == id).Value;
}
在一次进程调用期间,函数GetSubitemValue
将被多次调用(假设为500)(这是Razor视图渲染过程的一部分)。
是否有任何内置的linq增强功能支持可重复列表搜索(迭代?)。我是否应该自己做一些缓存或索引?
答案 0 :(得分:4)
据我所知,没有内置的机制来增强多种排序。但是,您可以按如下方式实现返回值的缓存。
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,则您的初始代码段会引发异常。