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