使用LINQ更新多行的多列

时间:2014-01-20 06:59:31

标签: c# linq

我正在使用Entity框架来构建应用程序。

要更新的表。

[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){

}

如何使用LINQ使用来自前端的列表中的值更新表格多列(选中,注释)?

4 个答案:

答案 0 :(得分:3)

假设dbContextDataContextId是表格的主键,请尝试以下操作:

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();
}

答案 1 :(得分:0)

  

如何使用值

更新表格多列(选中,注释)

完全相同的方式只更新一列...

  1. 从上下文获取实体
  2. 更新列/列
  3. 在上下文中调用SaveChanges()方法。
  4. using(var ctx = new MyContext())
    {
        var entity = ctx.Table.First(t => t.Id == myId);
        entity.Prop1 = "newValue";
        entity.Prop2 = 23;
    
        ctx.SaveChanges();
    }
    

答案 2 :(得分:0)

您可以在列表中使用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();
}

答案 3 :(得分:0)

您可以如下所示使用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"; });