2012-08-24 20 views
6

voglio aggiungere le righe più in Tabella utilizzando LINQ to SQLAggiungi record multiplo utilizzando 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;    
    } 

Quando aggiungo record in oggetto elenco cioè FADD il record è sovrascrive con l'ultimo valore AllList

risposta

15

Sono in ritardo per la festa, ma ho pensato che potreste voler sapere che il ciclo for non è necessario. Meglio usare foreach (non è necessario l'indice).

Diventa ancora più interessante quando si utilizza LINQ (metodo rinominato per chiarezza):

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

Tra l'altro, non si dovrebbe tenere un contesto di dati a cui si accede per tutto il tempo; it's better to create one locally, all'interno di un'istruzione using, che gestirà correttamente la disconnessione del database.

+0

Il tuo collegamento al forum MSDN in realtà contraddice in qualche modo la tua affermazione. Sì, dovresti disporre del tuo contesto dati quando non ne hai bisogno, ma tienilo quando lo fai (come la tabella _customer e un esempio di tabella table_ nel tuo link). Il momento giusto per farlo dipenderà dal tuo codice, ma come sviluppatore web di solito metto in coda alla fine della richiesta web. – Trisped

11

Si dovrebbe creare l'oggetto di commenti nel campo di applicazione del ciclo for, in modo da cambiare il metodo di:

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

Grazie, Yograj Gupta. Problema risolto. –

+0

+1 - Eliminato il mio duplicato – Habib