我有一个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);
}
}
答案 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,因为性能差距将减少到最小。