能否通过单次查询将两列数据分别存入HashSet?
合并查询获取两个HashSet的解决方案
你可以通过单次查询拉取所有需要的Type和Provider字段数据到内存,再分别转换为HashSet,以此减少数据库往返次数:
// 单次数据库查询,获取所有Type和Provider的组合数据 var entityData = _context.MyEntities .Select(m => new { m.Type, m.Provider }) .ToList(); // 在内存中分别提取字段并转换为HashSet var types = entityData.Select(item => item.Type).ToHashSet(); var providers = entityData.Select(item => item.Provider).ToHashSet();
优化建议
如果表中存在大量重复的Type/Provider组合,可以在数据库层面先执行去重操作,减少传输到客户端的数据量:
var entityData = _context.MyEntities .Select(m => new { m.Type, m.Provider }) .Distinct() // 数据库端完成去重逻辑 .ToList(); var types = entityData.Select(item => item.Type).ToHashSet(); var providers = entityData.Select(item => item.Provider).ToHashSet();
原理说明
EF Core无法直接在数据库查询中生成HashSet(这是客户端内存结构),因此必须先将所需字段数据加载到内存,再进行客户端的集合转换。这种方式仅触发一次SQL查询,相比原有的两次查询能有效降低数据库交互开销。
内容的提问来源于stack exchange,提问作者KhePri
相关产品推荐
相关产品推荐

