C# 使用LINQ更新多行的多列
我正在使用实体框架构建应用程序 待更新的表C# 使用LINQ更新多行的多列,c#,linq,C#,Linq,我正在使用实体框架构建应用程序 待更新的表 [Id] [CheckItemId] [Checked] [Comment] 1 100 1 abc 2 150 0 xyz 类别: public class CheckListRequest { public int ID { get; set; } public bool IsChecked { get; set; }
[Id] [CheckItemId] [Checked] [Comment]
1 100 1 abc
2 150 0 xyz
类别:
public class CheckListRequest
{
public int ID { get; set; }
public bool IsChecked { get; set; }
public string Comment { get; set; }
}
public static void UpdateCheckList(List<CheckListRequest> checkList){
}
公共类CheckListRequest
{
公共int ID{get;set;}
已检查公共布尔值{get;set;}
公共字符串注释{get;set;}
}
公共静态void UpdateCheckList(列表清单){
}
如何使用LINQ使用来自前端的列表中的值更新表的多列(选中,注释?假设
dbContext
是您的DataContext
并且Id
是表的主键,请尝试以下操作:
public static void UpdateCheckList(List<CheckListRequest> checkList)
{
foreach (CheckListRequest clr in checkList)
{
CheckListRequest clrInDB = dbContext.CheckListRequests.SingleOrDefault(o.Id == clr.Id);
clrInDB.IsChecked = clr.IsChecked;
clrInDB.Comment = clr.Comment;
}
dbContext.SaveChanges();
}
publicstaticvoidupdatechecklist(列表清单)
{
foreach(检查表中的CheckListRequest clr)
{
CheckListRequest clrInDB=dbContext.CheckListRequests.SingleOrDefault(o.Id==clr.Id);
clrInDB.IsChecked=clr.IsChecked;
clrInDB.Comment=clr.Comment;
}
dbContext.SaveChanges();
}
假设dbContext
是您的DataContext
并且Id
是表的主键,请尝试以下操作:
public static void UpdateCheckList(List<CheckListRequest> checkList)
{
foreach (CheckListRequest clr in checkList)
{
CheckListRequest clrInDB = dbContext.CheckListRequests.SingleOrDefault(o.Id == clr.Id);
clrInDB.IsChecked = clr.IsChecked;
clrInDB.Comment = clr.Comment;
}
dbContext.SaveChanges();
}
publicstaticvoidupdatechecklist(列表清单)
{
foreach(检查表中的CheckListRequest clr)
{
CheckListRequest clrInDB=dbContext.CheckListRequests.SingleOrDefault(o.Id==clr.Id);
clrInDB.IsChecked=clr.IsChecked;
clrInDB.Comment=clr.Comment;
}
dbContext.SaveChanges();
}
如何使用这些值更新表的多列(选中,注释)
与只更新一列的方式完全相同
SaveChanges()
方法SaveChanges()
方法您可以在列表中使用foreach循环,如下所示:
public static void UpdateCheckList(List<CheckListRequest> checkList)
{
checkList.foreach(CL =>{
CheckListRequest objCLR= DataContext.CheckListRequests
.SingleOrDefault(E => E.Id == CL.Id);
objCLR.IsChecked = CL.IsChecked;
objCLR.Comment = CL.Comment;
});
DataContext.SaveChanges();
}
publicstaticvoidupdatechecklist(列表清单)
{
检查表。foreach(CL=>{
CheckListRequest objCLR=DataContext.CheckListRequests
.SingleOrDefault(E=>E.Id==CL.Id);
objCLR.IsChecked=CL.IsChecked;
objCLR.Comment=CL.Comment;
});
DataContext.SaveChanges();
}
您可以使用列表中的foreach循环,如下所示:
public static void UpdateCheckList(List<CheckListRequest> checkList)
{
checkList.foreach(CL =>{
CheckListRequest objCLR= DataContext.CheckListRequests
.SingleOrDefault(E => E.Id == CL.Id);
objCLR.IsChecked = CL.IsChecked;
objCLR.Comment = CL.Comment;
});
DataContext.SaveChanges();
}
publicstaticvoidupdatechecklist(列表清单)
{
检查表。foreach(CL=>{
CheckListRequest objCLR=DataContext.CheckListRequests
.SingleOrDefault(E=>E.Id==CL.Id);
objCLR.IsChecked=CL.IsChecked;
objCLR.Comment=CL.Comment;
});
DataContext.SaveChanges();
}
您可以像下面这样使用ForEachAsync或ForEach
var actionTakenOnEndorsement = _context.Endorsement.Where(x => x.IsDeleted == false && x.IsApproved != null).OrderBy(o => o.SolutionId).ThenByDescending(o => o.ModifiedOn).DistinctBy(x => new { x.SolutionId, x.UserId }).AsQueryable();
await actionTakenOnEndorsement.ForEachAsync(x => { x.IsEndorsementRevoked = true; x.Comment = "Revoked by system"; });
您可以像下面这样使用ForEachAsync或ForEach
var actionTakenOnEndorsement = _context.Endorsement.Where(x => x.IsDeleted == false && x.IsApproved != null).OrderBy(o => o.SolutionId).ThenByDescending(o => o.ModifiedOn).DistinctBy(x => new { x.SolutionId, x.UserId }).AsQueryable();
await actionTakenOnEndorsement.ForEachAsync(x => { x.IsEndorsementRevoked = true; x.Comment = "Revoked by system"; });
有多个ID出现,我的意思是列表清单中至少有10个对象),每个对象对应数据库中的一行,那么如何通过从列表中获取值来更新表行的多个列有多个ID出现,我的意思是列表清单中至少有10个对象),每个对象对应于数据库中的一行,那么我如何通过从列表中获取值来更新表行的多列?每次循环运行时,保存的更改需要进入循环进行更改…这取决于您的要求,假设您更新了10条记录,而第4条记录失败,是否要回滚前三条记录的更改?可以将其减少。其中(..).SingleOrDefault()为单个SingleOrDefault(…)调用;-)即使某些记录失败,也不需要回滚。它将由其他方法记录。@ankur在这种情况下,您可以将
dbContext.SaveChanges()
放在foreach
循环中。根据您的要求,每次循环运行时,都需要将保存的更改放在循环中进行更改,假设您更新了10条记录,但第4条记录失败,是否要回滚前三条记录的更改?您可以将其减少。其中(..).SingleOrDefault()为一个SingleOrDefault(…)调用;-)即使某些记录失败,也不需要回滚。它将由其他方法记录。@ankur在这种情况下,您可以将dbContext.SaveChanges()
放入foreach
循环中