如何识别 EF Core 3.1 中的重复项
How to identify duplicates in EF Core 3.1
问题如下:
我已经将项目更新到 EF Core 3.1
我在公司数据库中显示重复电子邮件地址的代码停止工作。
此代码在更新后不再有效:
cos = cos.Where(x => !string.IsNullOrEmpty(x.Email)).GroupBy(c => c.Email).Where(c => c.Count() > 1).SelectMany(grp => grp);
return View(await cos.ToListAsync());
我认为这是问题所在:
在 EF Core 3.0 之前,这是隐式完成的,因此 EF 下载所有结果行,然后应用 LINQ GroupBy。但是,这种隐式行为可能会让程序员期望整个 LINQ 查询在 SQL 中执行,当结果集相当大时可能会产生巨大的性能影响。因此,在 EF Core 3.0 中完全禁用了 GroupBy 的隐式客户端评估。
你知道怎么修改吗a.m。使用 EF Core 3.1 的代码?
感谢您的帮助。
可以替换group -> count -> ungroup查询操作
.GroupBy(c => c.Email).Where(c => c.Count() > 1).SelectMany(grp => grp)
目前无法翻译成 SQL(并且将来也没有很好的潜力 SQL 翻译),自子查询计算 "key" 匹配,例如
.Where(c => cos.Count(c1 => c1.Email == c.Email) > 1)
这适用于 ef core 3.1 并被正确翻译成 SQL。
var result = (from p in _db.People
group p by p.FullName into g
where g.Count() > 1
select g.Key)
.SelectMany(key => _db.People
.Where(t => t.FullName.ToUpper() == key.ToUpper()))
问题如下:
我已经将项目更新到 EF Core 3.1 我在公司数据库中显示重复电子邮件地址的代码停止工作。 此代码在更新后不再有效:
cos = cos.Where(x => !string.IsNullOrEmpty(x.Email)).GroupBy(c => c.Email).Where(c => c.Count() > 1).SelectMany(grp => grp);
return View(await cos.ToListAsync());
我认为这是问题所在:
在 EF Core 3.0 之前,这是隐式完成的,因此 EF 下载所有结果行,然后应用 LINQ GroupBy。但是,这种隐式行为可能会让程序员期望整个 LINQ 查询在 SQL 中执行,当结果集相当大时可能会产生巨大的性能影响。因此,在 EF Core 3.0 中完全禁用了 GroupBy 的隐式客户端评估。
你知道怎么修改吗a.m。使用 EF Core 3.1 的代码? 感谢您的帮助。
可以替换group -> count -> ungroup查询操作
.GroupBy(c => c.Email).Where(c => c.Count() > 1).SelectMany(grp => grp)
目前无法翻译成 SQL(并且将来也没有很好的潜力 SQL 翻译),自子查询计算 "key" 匹配,例如
.Where(c => cos.Count(c1 => c1.Email == c.Email) > 1)
这适用于 ef core 3.1 并被正确翻译成 SQL。
var result = (from p in _db.People
group p by p.FullName into g
where g.Count() > 1
select g.Key)
.SelectMany(key => _db.People
.Where(t => t.FullName.ToUpper() == key.ToUpper()))