从id列表更新Entity Framework中的多行

时间:2014-02-06 02:02:04

标签: c# sql asp.net-mvc entity-framework

我正在尝试为实体框架创建一个查询,这将允许我获取id列表并更新与它们关联的字段。

SQL中的示例:

UPDATE Friends
SET msgSentBy = '1234'
WHERE id IN (1, 2, 3, 4)

如何将上述内容转换为实体框架?

4 个答案:

答案 0 :(得分:121)

如下所示

var idList=new int[]{1, 2, 3, 4};
using (var db=new SomeDatabaseContext())
{
    var friends= db.Friends.Where(f=>idList.Contains(f.ID)).ToList();
    friends.ForEach(a=>a.msgSentBy='1234');
    db.SaveChanges();
}

UPDATE:

您可以更新多个字段,如下所示

friends.ForEach(a =>
                      {
                         a.property1 = value1;
                         a.property2 = value2;
                      });

答案 1 :(得分:11)

有两个开源项目允许这样做:EntityFramework.Extended和E ntity Framework Extensions

答案 2 :(得分:1)

我创建了一个库,用于通过EF Core 5往返批量删除或更新记录。

示例代码如下:

<h1>JS Skills Test</h1>
<label for="name">Enter Your Name</label>
<input id="name" type="text" placeholder="Enter Your Name">
<button onclick="helloName()">Click Me</button>
<div id="message"></div>

<div id="show-buttons" style="display: none;">
  <button id="bad">I'm not doing to well</button>
  <button id="good">I'm doing wonderful</button>
</div>

Github存储库:https://github.com/yangzhongke/Zack.EFCore.Batch 报告:https://www.reddit.com/r/dotnetcore/comments/k1esra/how_to_batch_delete_or_update_in_entity_framework/

答案 3 :(得分:0)

var idList=new int[]{1, 2, 3, 4};
var friendsToUpdate = await Context.Friends.Where(f => 
    idList.Contains(f.Id).ToListAsync();

foreach(var item in previousEReceipts)
{
  item.msgSentBy = "1234";
}

您可以使用foreach更新满足条件的每个元素。

以下是更通用的示例:

var itemsToUpdate = await Context.friends.Where(f => f.Id == <someCondition>).ToListAsync();

foreach(var item in itemsToUpdate)
{
   item.property = updatedValue;
}
Context.SaveChanges()

通常,您很可能会在等待数据库查询时使用异步方法。