.net - EF Core 更新 ...从选择 WHERE
问题描述
如何使用 EF Core SqlServer 生成此查询?
UPDATE Table1
SET Field1 = sil.Field1,
Field2 = sil.Field2
FROM Table2 sil WITH (NOLOCK)
WHERE sil.Field3= ''
AND sil.Id1 = Table1.Id1
AND sil.Id2 = Table1.Id2
AND sil.Id3 != Table1.Id3
重要的 !
我想用单个查询生成它(不是每行查询)
解决方案
AFAIK 没有直接等同于UPDATE ... FROM EF 中的语句。相反,您将查询您的数据集,更新实体模型,然后将更新推送回来。
// 2 database select statements
var table1 = database.Table1.ToList();
var table2 = database.Table2.ToList();
// in-memory processing. no database involvement.
foreach(Entity1 t1record in table1) {
var t2record = table2.Where(sil => ...).FirstOrDefault();
if(null == t2record) { continue; }
t1record.Field1 = t2record.Field1; // etc...
}
// push changes back to the database. EFCore should do this as a single SQL statement
database.SaveChanges();
推荐阅读
- mysql - 匹配两个表中的记录
- bash - 一次读取一行文件,然后比较 grepped 日期(在 bash 中)
- node.js - 邮递员“错误:ValidationError:用户名:路径‘用户名’是必需的。”
- python - sympy:显示表达式中已替换的所有符号变量
- c++ - 将 cmake 链接到 Visual Studio 的 cmake 工具
- visual-studio - 调试期间如何在Watch窗口中显示继承树?
- c# - #c (ArrayList) 中 for 循环或 foreach 中带有索引的集合
- kubernetes - 当一个工作 pod 成功时完成并行 Kubernetes 作业
- node.js - Fetch /POST request to Server:接收 multipart/form-data 时为空数组;
- cordova - 定位在 OpenTok 视频上的 HTML 元素不可点击