2012-08-24 17 views
6

Chcę dodać wiele wierszy do tabeli przy użyciu LINQ do SQLDodaj wiele rekordów przy użyciu LINQ-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;    
    } 

Kiedy dodać rekordy na liście obiektów tj Fadd rekord jest nadpisuje z ostatniej wartości AllList

Odpowiedz

15

Jestem spóźniony na imprezę, ale pomyślałem, że możesz chcieć wiedzieć, że pętla for jest niepotrzebna. Lepiej używać foreach (nie potrzebujesz indeksu).

To staje się jeszcze bardziej interesująca, gdy używasz LINQ (przemianowany metody dla jasności):

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

Nawiasem mówiąc, nie należy trzymać jednego kontekstu danych, że dostęp przez cały czas; it's better to create one locally, wewnątrz instrukcji using, która poprawnie obsłuży rozłączenie bazy danych.

+0

Twój link do forum MSDN faktycznie jest sprzeczny z Twoim oświadczeniem. Tak, powinieneś pozbyć się kontekstu danych, kiedy go nie potrzebujesz, ale zachowaj go, kiedy to robisz (np. Tabelę klientów i przykład zamówienia w tabeli). Prawidłowy czas na to będzie zależeć od kodu, ale jako programista stron internetowych zwykle używam na końcu żądania internetowego. – Trisped

11

należy utworzyć obiekt zwrotne w zakresie pętli, tak aby zmienić metodę:

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

Dziękuję Yograj Gupta. Problem rozwiązany. –

+0

+1 - Usunięto mój duplikat – Habib

Powiązane problemy