我正在尝试为实体框架创建一个查询,这将允许我获取id列表并更新与它们关联的字段。
SQL中的示例:
UPDATE Friends
SET msgSentBy = '1234'
WHERE id IN (1, 2, 3, 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();
}
您可以更新多个字段,如下所示
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()
通常,您很可能会在等待数据库查询时使用异步方法。