繁体   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