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
    循环中