首页 > 解决方案 > 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

重要的 !

我想用单个查询生成它(不是每行查询)

标签: .netsql-serverentity-frameworkef-core-3.0ef-core-3.1

解决方案


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();

推荐阅读