gpt4 book ai didi

c# - Linq 用另一个值替换列值

转载 作者:太空宇宙 更新时间:2023-11-03 19:00:21 25 4
gpt4 key购买 nike

好吧,我正在执行一个 linq 查询以获取具有相同列的结果列表,然后我需要用一个新值替换该列值。

第一个代码:

var db = GetContext();
var result = from f in GetContext().ProjectStateHistories
where f.ProjectId.Equals(oldProjectId)
select f;

foreach (var item in result)
{
var projectStateHistoryUpdate = db.ProjectStateHistories.Find(item.Id);
projectStateHistoryUpdate.ProjectId = newProjectId;
db.Entry(projectStateHistoryUpdate).State = EntityState.Modified;
}
db.SaveChanges();

我搜索了一些答案,发现我可以使用 Select 并创建一个新对象 ( Linq replace null/empty value with another value )

第二个代码:

var result = (from f in GetContext().ProjectStateHistories
where f.ProjectId.Equals(oldProjectId)
select f).Select(d=> new { Id = d.Id, EventName = d.EventName, LogUser = d.LogUser, ProjectId = newProjectId, TimeStamp = d.TimeStamp });

甚至,第三个代码:

var db = GetContext();
var result = (from f in db.ProjectStateHistories
where f.ProjectId.Equals(oldProjectId)
select f).Select(d=> new { ProjectId = newProjectId});

但只有第一个代码有效

我想问问我做错了什么,因为我认为最好用查询更改值,而不是使用 foreach。

最佳答案

见下面的代码:

var db = GetContext();
(from f in db.ProjectStateHistories
where f.ProjectId.Equals(oldProjectId)
select f)
.ToList()
.ForEach(i => i.ProjectId = newProjectId);
db.SaveChanges();

或者:

var db = GetContext();
db.ProjectStateHistories
.Where(f => f.ProjectId.Equals(oldProjectId))
.ToList()
.ForEach(f => f.ProjectId = newProjectId);
db.SaveChanges();

关于c# - Linq 用另一个值替换列值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37075142/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com