2012-08-24 39 views
6

Tôi muốn thêm Nhiều hàng vào Bảng sử dụng LINQ to SQLThêm Nhiều kỷ lục sử dụng LINQ-to-SQL

public static FeedbackDatabaseDataContext context = new FeedbackDatabaseDataContext(); 
    public static bool Insert_Question_Answer(List<QuestionClass.Tabelfields> AllList) 
    { 
      Feedback f = new Feedback(); 
      List<Feedback> fadd = new List<Feedback>(); 
      for (int i = 0; i < AllList.Count; i++) 
      { 
       f.Email = AllList[i].Email; 
       f.QuestionID = AllList[i].QuestionID; 
       f.Answer = AllList[i].SelectedOption; 
       fadd.Add(f); 
      } 
      context.Feedbacks.InsertAllOnSubmit(fadd); 
      context.SubmitChanges(); 
     return true;    
    } 

Khi tôi thêm bản ghi vào đối tượng danh sách tức là FADD kỷ lục là ghi đè với giá trị cuối cùng của AllList

Trả lời

15

Tôi đến muộn bữa tiệc, nhưng tôi nghĩ bạn có thể muốn biết rằng vòng lặp là không cần thiết. Sử dụng tốt hơn foreach (bạn không cần chỉ mục).

Nó được thậm chí thú vị hơn khi bạn sử dụng LINQ (phương pháp đổi tên cho rõ ràng):

public static void InsertFeedbacks(IEnumerable<QuestionClass.Tabelfields> allList) 
{ 
    var fadd = from field in allList 
       select new Feedback 
          { 
           Email = field.Email, 
           QuestionID = field.QuestionID, 
           Answer = field.SelectedOption 
          }; 
    context.Feedbacks.InsertAllOnSubmit(fadd); 
    context.SubmitChanges(); 
} 

Bằng cách này, bạn không nên giữ một bối cảnh dữ liệu mà bạn truy cập vào tất cả các thời gian; it's better to create one locally, bên trong câu lệnh sử dụng, sẽ xử lý đúng cách ngắt kết nối cơ sở dữ liệu.

+0

Liên kết của bạn tới diễn đàn MSDN thực sự mâu thuẫn với tuyên bố của bạn một chút. Có, bạn nên vứt bỏ bối cảnh dữ liệu khi bạn không cần nó, nhưng hãy giữ nó khi bạn làm (như bảng _customer và một ví dụ table_ ví dụ trong liên kết của bạn). Thời gian chính xác để thực hiện việc này sẽ tùy thuộc vào mã của bạn, nhưng với tư cách là nhà phát triển web tôi thường bỏ ở cuối yêu cầu web. – Trisped

11

bạn nên tạo đối tượng của phản hồi trong phạm vi của vòng lặp for, vì vậy thay đổi phương pháp của bạn:

public static bool Insert_Question_Answer(List<QuestionClass.Tabelfields> AllList) 
{ 
     List<Feedback> fadd = new List<Feedback>(); 
     for (int i = 0; i < AllList.Count; i++) 
     { 
      Feedback f = new Feedback(); 
      f.Email = AllList[i].Email; 
      f.QuestionID = AllList[i].QuestionID; 
      f.Answer = AllList[i].SelectedOption; 
      fadd.Add(f); 
     } 
     context.Feedbacks.InsertAllOnSubmit(fadd); 
     context.SubmitChanges(); 
    return true;    
} 
+0

Cảm ơn bạn Yograj Gupta. Giải quyết sự cố. –

+0

+1 - Đã xóa bản sao của tôi – Habib

Các vấn đề liên quan