2015-04-21 21 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(); 
相关问题