C# 在不加载的情况下按条件更新DB表中的字段

C# 在不加载的情况下按条件更新DB表中的字段,c#,entity-framework,linq,entity-framework-core,C#,Entity Framework,Linq,Entity Framework Core,是否可以使用EF核心和LINQ执行简单的SQL更新操作符? 由于类型和重构安全性,我想使用LINQ。我需要避免在应用程序和数据库驱动程序之间来回加载大量对象 基本上我需要这样的smth: DB.Items.Update(i => i.Value = 5).Where(i => i.Flag > 5); IQueryable<Item> items = DB.Items.Where(i => i.Flag > 5).Select(r => new

是否可以使用EF核心和LINQ执行简单的SQL更新操作符? 由于类型和重构安全性,我想使用LINQ。我需要避免在应用程序和数据库驱动程序之间来回加载大量对象 基本上我需要这样的smth:

DB.Items.Update(i => i.Value = 5).Where(i => i.Flag > 5);
IQueryable<Item> items = DB.Items.Where(i => i.Flag > 5).Select(r => new Item
{
  .,
  .,
  .,
  Value = 5
});

DB.Items.UpdateRange(items);

实体框架与模型一起工作,所以不能直接更新linq查询上的值。您所能做的就是使用该命令,使用您想要更新的值创建模型,并将它们保存到您可以使用的数据库中

示例代码:

var count = db.Items.Where(s => s.Title == "Game")
        .Update(o => new Item { Price = 999, Title = "Tablet" }, db);

您不需要获取所有要更新的记录

只需创建一个如下所示的查询:

DB.Items.Update(i => i.Value = 5).Where(i => i.Flag > 5);
IQueryable<Item> items = DB.Items.Where(i => i.Flag > 5).Select(r => new Item
{
  .,
  .,
  .,
  Value = 5
});

DB.Items.UpdateRange(items);
IQueryable items=DB.items.Where(i=>i.Flag>5)。选择(r=>newitem
{
.,
.,
.,
值=5
});
DB.Items.UpdateRange(项目);
基本上IQueryable是查询的in-DB表示形式。
它应该在不获取这些项的情况下更新这些项。

看看这个库,它提供了您正在寻找的方法:iAs名称允许您假设LINQ是为查询而设计的,而不是为更新而设计的。所以无论你用LINQ做什么,它都会返回一个新的集合,而不是更新一个现有的集合。当然,我的意思不是LINQ本身,而是用LINQ风格更新记录。GenericDataManager是一个很好的库,但不支持EF Core(跟踪EF Repo上的问题)。这会获取查询中的所有项目。查询是通过
UpdateRange
方法执行的。请在发布之前测试您的代码。此外,还不清楚
的含义。