2014-01-20 50 views
1

我正在使用實體框架來構建應用程序。使用LINQ更新多行多列使用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; } 
    public string Comment { get; set; } 
} 

public static void UpdateCheckList(List<CheckListRequest> checkList){ 

} 

如何更新像(選中,評論)使用LINQ在列表中的值來從前端表多列?

回答

3

假設dbContext是你DataContextId是表的主鍵,試試這個:

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

做的SaveChanges neeed來在循環中每次循環運行時間進行更改... – ankur

+0

這取決於您的要求,假設您更新了10條記錄,並且第4條記錄失敗了,您是否想要回滾前三條記錄的更改? – ekad

+1

您可以通過這種方式減少.Where(..)。SingleOrDefault()到單個SingleOrDefault(...)調用;-) – Moeri

0

如何與值更新等(經過,評論)表中多列

正是你只更新一列以同樣的方式...

  1. 從上下文獲取實體
  2. 更新列/列
  3. 調用SaveChanges()上下文方法。
using(var ctx = new MyContext()) 
{ 
    var entity = ctx.Table.First(t => t.Id == myId); 
    entity.Prop1 = "newValue"; 
    entity.Prop2 = 23; 

    ctx.SaveChanges(); 
} 
+0

有多個id,我的意思是List checkList中至少有10個對象),每個對象對應於數據庫中的一行,那麼如何通過從列表中取值來更新表格行的多列 – ankur

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