c#对象列表过滤(linq?)

时间:2017-02-16 07:32:01

标签: c# linq

我有一个对象列表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增强功能支持可重复列表搜索(迭代?)。我是否应该自己做一些缓存或索引?

1 个答案:

答案 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,则您的初始代码段会引发异常。