我的代码正在运行,但我正在努力寻找一种更有效的方法来实现这一目标。就像没有foreach循环的linq解决方案那样会更好。我没有任何性能问题..
List<Table> tables = getTables();
foreach (TableCategories category in categories)
{
category.Tables=tables.FindAll(tbl => tbl.CategoryId == category.Id);
}
对于数据库,我使用纯ADO.NET而不是linq,因为我正在使用postgres。
答案 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)复杂度。