好吧,我正在执行 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();
Run Code Online (Sandbox Code Playgroud)
我搜索了一些答案,我发现我可以使用 Select,并创建一个新对象(Linq 用另一个值替换 null/空值)
第二个代码:
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 });
Run Code Online (Sandbox Code Playgroud)
甚至,第三个代码:
var db = GetContext();
var result = (from f in db.ProjectStateHistories
where f.ProjectId.Equals(oldProjectId)
select f).Select(d=> new { ProjectId = newProjectId});
Run Code Online (Sandbox Code Playgroud)
但只有第一个代码有效。
我想问一下我做错了什么,因为我认为最好使用查询更改值,而不是使用 foreach。
见下面的代码:
var db = GetContext();
(from f in db.ProjectStateHistories
where f.ProjectId.Equals(oldProjectId)
select f)
.ToList()
.ForEach(i => i.ProjectId = newProjectId);
db.SaveChanges();
Run Code Online (Sandbox Code Playgroud)
或者:
var db = GetContext();
db.ProjectStateHistories
.Where(f => f.ProjectId.Equals(oldProjectId))
.ToList()
.ForEach(f => f.ProjectId = newProjectId);
db.SaveChanges();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10660 次 |
| 最近记录: |