C# 实体框架:如何从数据库表中不存在的列表中插入数据

C# 实体框架:如何从数据库表中不存在的列表中插入数据,c#,entity-framework,C#,Entity Framework,我正在从列表框中获取数据,并将其插入数据库。 在插入数据之前,我需要确保列表框中的数据在数据库中不存在。简而言之,只插入与数据库中的行不匹配的行。下表举例 数据插入代码: private void InsertList() { var listA=新列表(); var listB=新列表(); //通过拆分列表框中的项目来填充这两个列表 foreach(ListBox1.Items中的ListItem项) { var组件=item.Value.Split('/'); 添加(components.

我正在从
列表框中获取数据,并将其插入数据库。
在插入数据之前,我需要确保
列表框中的数据在数据库中不存在。简而言之,只插入与数据库中的行不匹配的行。下表举例

数据插入代码:

private void InsertList()
{
var listA=新列表();
var listB=新列表();
//通过拆分列表框中的项目来填充这两个列表
foreach(ListBox1.Items中的ListItem项)
{
var组件=item.Value.Split('/');
添加(components.First());
添加(components.Last());
}
使用(DataContext=newdatacontext())
{
对于(变量i=0;i
示例表:

在下表中,如果高亮显示的数据存在于列表中,则不会插入,因为它已经在数据库中


谢谢我的朋友:

考虑到这是一个有点长的条件(它不适合一行):


哪个属性是数据库中已经存在的内容的主键或唯一标识符?
LIST\u ITEM\u A
LIST\u ITEM\u B
都是主键(复合键)。我可以通过添加if语句来实现这一点:if(dataContext.LIST\u OBJECTS.Where(l=>l.LIST\u ITEM\u A==listA[I]&&l.LIST\u ITEM\u B==listB[I])。First()=null{\\insert}您知道如果我试图在声明中添加语句,为什么我无法引用
listObject
?对象超出范围。因为我搞错了,而且我现在不在编译器面前;)一秒钟谢谢你的编辑建议@Peyman,如果这是一个好建议的话,它只是在编辑冲突解决方案中丢失了。对不起,拖拉:我对实体框架相对来说比较陌生。我仍然在exits方法上出错。例如:
ctx没有包含任何的定义。
我还对字符串参数
a
b
如何能够公开“列表项”a和b感到困惑。再次感谢!那很好,这是我的另一个错误。我相信现在已经纠正了。
    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();
        }
    }
        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);
}