2015-04-21 4 views
1

Я пытаюсь вставить данные из двух List. Я могу успешно вставить из одного List, но добавление второго списка с использованием foreach loop не работает должным образом.Entity Framework: как вставлять данные при циклировании по нескольким спискам

Как пропустить каждый из этих списков, чтобы я мог вставлять их значения?

Код:

private void InsertList() 
    { 
     var listA = new List<string>(); 
     var listB = new List<string>(); 

     //Populate both list by splitting items in listbox 

     foreach (ListItem item in ListBox1.Items) 
     { 
      var components = item.Value.Split('/'); 

      listA.Add(components.First()); 

      listB.Add(components.Last()); 
     } 

     using (DataContext dataContext = new DataContext()) 
     { 
      foreach (var itemA in listA) 
      { 
       foreach (var itemB in listB) 
       { 

        LIST_OBJECTS listObject = new LIST_OBJECTS 
        { 
         LIST_ITEM_A = itemA, 
         LIST_ITEM_B = itemB 
        }; 

        dataContext.LIST_OBJECTS.Add(listObject); 

       } 

      } 

      dataContext.SaveChanges(); 
     } 
    } 
+0

, что является результатом? – Guy

+1

Второй цикл вызывает многократную рекурсивную вставку. Поэтому я получаю больше строк, вставленных на основе цикла в обоих списках. – Asynchronous

+1

Вставляя таким образом, что вам может быть лучше всего подан старинный цикл 'for'. – jdphenix

ответ

3

насчет for цикла?

for (var i = 0; i < listA.Count; i++) 
{ 
    LIST_OBJECTS listObject = new LIST_OBJECTS 
    { 
     LIST_ITEM_A = listA[i], 
     LIST_ITEM_B = listB[i] 
    }; 
    dataContext.LIST_OBJECTS.Add(listObject); 
} 

Поскольку вы знаете из создания списков, что у них будет одинаковое количество элементов, это прекрасно.

+0

Это прекрасно: Большое вам спасибо. И да, список всегда будет иметь одинаковое количество элементов, потому что я заполняю оба списка, разбивая элементы из элемента управления ListBox. – Asynchronous

2

Вы можете сделать это с помощью LINQ

LIST_OBJECTS listObject = listA.Join(listB, 
            a=>listA.Indexof(a), 
            b=>listB.Indexof(b), 
            (a,b)=> new LIST_OBJECTS() 
           { 
            LIST_ITEM_A =a, 
            LIST_ITEM_B =b 
           }).ToList(); 
Смежные вопросы