在c#中有效搜索集合

时间:2014-03-21 06:53:26

标签: c# wpf

我有一个AsyncObservable个类的集合,说"仪表板"。仪表板集合中的每个项目都包含一些其他类的集合,例如" chart"。该图表有各种属性,如名称,类型等...我想根据图表名称,类型等搜索此集合。谁能建议我一些搜索技巧?目前我正在使用foreach遍历整个集合并将输入的输入与集合中的每个项目进行比较(如果数据量很大,这不是那么有效)......我希望提高效率 - 我正在使用c#..

我的代码是:

foreach (DashBoard item in this.DashBoards)   
  {  
   Chart obj1 = item.CurrentCharts.ToList().Find(chart =>     chart.ChartName.ToUpper().Contains(searchText.ToUpper()));   
                    if (obj1 != null)  
                    {  
                        if (obj1.IsHighlighted != Colors.Wheat)  
                            obj1.IsHighlighted = Colors.Wheat;      
                        item.IsExpanded = true;   
                        flagList.Add(1);   
                    }  
                    else   
                    {    
                        flagList.Add(0);  
                }    
    }

1 个答案:

答案 0 :(得分:2)

您可以使用LINQ查询。

例如,您可以这样做。如果您发布代码,我们可以解决问题

Dashboard.SelectMany(q => q.Chart).Where(a => a.Name == "SomeName")

以下是参考linq question: querying nested collections

编辑:Foreach循环或LINQ

答案并不是很明确。任何代码成本论证都有两个方面:性能和可维护性。第一个是明显的和可量化的。

引擎盖下LINQ将迭代收集,就像foreach一样。 LINQ和foreach之间的区别在于LINQ将推迟执行,直到迭代开始。

表现明智请看一下这篇博文:http://www.schnieds.com/2009/03/linq-vs-foreach-vs-for-loop-performance.html

在你的情况下:

如果收藏品相对较小或中等,我建议您使用foreach以获得更好的性能。

在一天结束时。 Linq在大多数情况下更优雅但效率更低,而且代码稍微混乱但性能更好。

在大型集合/使用并行计算的地方有意义我会选择LINQ,因为性能差距将减少到最小。