我从ListBox
获取数据并插入数据库。
在数据插入之前,我需要确保数据库中不存在ListBox
中的数据。简而言之,只插入与数据库中的行不匹配的行。 下面的示例表。
数据插入代码:
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())
{
for (var i = 0; i < listA.Count; i++)
{
LIST_OBJECTS listObject = new LIST_OBJECTS
{
// Need to check data does not already exists in DB before adding.
LIST_KEY = 1,
LIST_ITEM_A = listA[i],
LIST_ITEM_B = listB[i]
};
dataContext.LIST_OBJECTS.Add(listObject);
}
dataContext.SaveChanges();
}
}
示例表:
在下表中,如果列表中存在突出显示的数据,则不会插入该数据,因为它已存在于数据库中。
感谢我的朋友:
答案 0 :(得分:1)
鉴于它有点冗长的条件(它不适合一条线):
for (var i = 0; i < listA.Count; i++)
{
if (!exists(dataContext, listA[i], listB[i]))
{
LIST_OBJECTS listObject = new LIST_OBJECTS
{
LIST_KEY = 1,
LIST_ITEM_A = listA[i],
LIST_ITEM_B = listB[i]
};
dataContext.LIST_OBJECTS.Add(listObject);
}
}
dataContext.SaveChanges();
然后是一个单独的私有方法:
private bool exists(DataContext ctx, string a, string b)
{
return ctx.LIST_OBJECTS.Any(i => i.LIST_ITEM_A == a
&& i => i.LIST_ITEM_B == b);
}