sql-server - 将 Linq 转换为 SQL 更新 ... FROM Other_table WHERE
问题描述
EF Core 翻译有我预期的结果
UPDATE Table1
SET field1 = t2.field1,
field2 = t2.field2
FROM Table2 as t2
WHERE t1.Id1 != t2.Id2 AND
t1.Id2 = t2.Id2 AND
t2.SomeField > 0
但在 SQL 探查器中,我可以看到我尝试更新的每条记录的1 个查询。
这是我的代码。
var uploads = uow.Repository<Table2>().List(spec);
var errors = uow.Repository<Table1>().Get();
foreach (var upload in uploads)
{
var toUpdate = errors.Where(x =>
x.Id1 != upload.Id2 &&
x.Id2 == upload.Id2);
foreach (var error in toUpdate)
{
error.IsResolved = true;
}
}
uow.SaveChanges();
解决方案
您想要的称为“批量更新”,这不是 Entity Framework 的默认行为,但有几个 NuGet 包可以正确处理它。
例如,您可以查看EFCore.BulkExtensions。
推荐阅读
- vb.net - 在VB.NET中获取动态组合框的项目和索引
- javascript - JavaScript。点击一个改变颜色,点击另一个恢复,很多元素,怎么做?
- python - numpy 中是否有 NULL/NIL 值?对于 np.uint16 !在-1旁边?
- angular - 角度/弹性布局不适用于角度 9
- python - 如何使用 python 快速运行脚本或文件,而无需手动输入终端
- google-cloud-build - 是否可以在 Google Cloud Build 中动态生成标签?
- javascript - 反应钩子:输入onChange第一个字符不能删除
- kubernetes - 如何使用跑步车 7
- r - 拆分字符串并获取最后一项
- arduino - 如何在 GSM 网络上发起电话会议?