DFE*_*ENS 2 c# linq master-detail
我有一个看起来像这样的设置
foreach(Master m in masters){
m.details = allDetails.Where(d => d.ID == m.detailID).ToList();
}
Run Code Online (Sandbox Code Playgroud)
masters 和 AllDetails 只是对象列表,这里没有运行实际的 SQL。我早些时候这样做了。我实际上没有写一个“正常”的 sql join 查询,因为我希望这种方式相当快......
这运行得非常慢,就像 20s+ 一样,对于 20k 主条目。
我知道我一定遗漏了一些非常明显的东西,但我无法弄清楚是什么。有什么办法可以解决这个超级常见的问题?
对于每个Master你遍历整个allDetails列表。您应该使用分组并创建一个字典:
var detailsPerMaster = allDetails.GroupBy(d => d.ID)
.ToDictionary(g => g.Key, g => g.ToList());
Run Code Online (Sandbox Code Playgroud)
然后你可以设置你的details属性:
foreach(Master m in masters)
m.details = detailsPerMaster[m.detailID];
Run Code Online (Sandbox Code Playgroud)
或者为了更好地匹配您的结果:
foreach(Master m in masters)
m.details = detailsPerMaster.TryGetValue(m.detailID, out var list) ? list : new List<--detailTypeHere-->();
Run Code Online (Sandbox Code Playgroud)