2015-04-21 22 views
1

我試圖從兩個List插入數據。 我能夠從一個List成功插入,但使用foreach loop添加第二個列表不能正常工作。實體框架:如何在循環多個列表的同時插入數據

如何循環訪問這些列表中的每一個,以便我可以插入它們的值?

代碼:

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

像這樣插入你可能是最好的服務,爲'olde' 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(); 
相關問題