Linq查找元素和foreach循环

本文关键字:foreach 循环 元素 查找 Linq | 更新日期: 2023-09-27 18:08:44

我的代码正在工作,但我正试图找到一种更有效的方法来实现这一点。就像没有foreach循环的linq解决方案那样会更好。我没有任何性能问题。

  List<Table> tables = getTables();
  foreach (TableCategories category in categories)
  {
   category.Tables=tables.FindAll(tbl => tbl.CategoryId == category.Id);
  }

对于数据库我使用纯ADO。. NET不是linq,因为我使用postgres。

Linq查找元素和foreach循环

如何:

var tablesByCategory = getTables().ToLookup(t => t.CategoryId);
foreach(var category in categories)
{
    category.Tables = tablesByCategory[category.Id];
}

这更有效(假设您有很多表),因为您在开始时用O(n)时间构建查找,然后for循环中的每次查找都是O(1)时间,因此您最终得到O(m + n)而不是O(m*n)复杂度。