Linq发现元素和foreach循环

时间:2011-09-14 02:17:36

标签: c# .net linq

我的代码正在运行,但我正在努力寻找一种更有效的方法来实现这一目标。就像没有foreach循环的linq解决方案那样会更好。我没有任何性能问题..

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

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

1 个答案:

答案 0 :(得分:6)

怎么样:

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)复杂度。