我注意到 Microsoft.EntityFrameworkCore Linq 扩展方法中没有 ToHashSet 的 异步 版本,我假设合适和安全的方式是使用 HashSet 来实现对象的材料化以防止重复,我是否错过了什么?如果这么重要为什么没有它的异步版本呢?
我注意到 Microsoft.EntityFrameworkCore Linq 扩展方法中没有 ToHashSet 的 异步 版本,我假设合适和安全的方式是使用 HashSet 来实现对象的材料化以防止重复,我是否错过了什么?如果这么重要为什么没有它的异步版本呢?
IList GetList();
所以,从EntityFrameworkCore返回的所有内容都是一个IList;一个可索引的、非唯一的值集合。而HashSet由于访问速度更快,是一个唯一的、非索引的值集合。相等比较决定了它的唯一性,而超过几列的任何内容开始计算起来都变得非常昂贵。
虽然你可能认为直接使用HashSet会更高效,但如果需要的话,数据已经是一个列表。ToListAsync()只是称呼玫瑰为玫瑰,并加载数据。然后,如果需要,可以将其转换为HashSet。
Equals
和GetHashCode
方法?我认为并没有。如果您有重复值,很可能是由于编写不良的LINQ查询而导致的。 - Svyatoslav DanylivToList().ToHashSet()
来了解原因(它并不像你想象的那么有用)。 - Caius Jard