在集合中使用LINQ检查重复

时间:2016-07-20 09:17:27

标签: c# linq

我有在数据库中插入记录的功能。我想确保数据库中没有重复的条目。函数首先检查是否有查询字符串参数。如果有,那么它就像编辑模式,否则插入模式。有一个函数可以返回数据库中当前添加的记录。在插入数据库之前,我需要根据两列检查重复。

    myService = new myService();
    myFlow mf = new myFlow();
    if (!string.IsNullOrEmpty(Request["myflowid"]))
    {
        mf = myService.Getmyflow(Convert.ToInt32(Request["myflowid"]));
    }
    int workcount = 0;
    int.TryParse(txtWorkCount.Text, out workcount);
    mf.Name = txtName.Text.Trim();
    mf.Description = txtDescription.Text.Trim();
    mf.FunctionCode = txtFunctioneCode.Text.Trim();
    mf.FunctionType = txtFunctioneType.Text.Trim();
    mf.WorkCount = workcount;

    if (mf.WorkFlowId == 0)
    {
        mf.SortOrder = 0;
        mf.Active = true;
        mf.RecordDateTime = DateTime.Now;
        message = "Saved Successfully";
    }
    else
    {
        _editMode = true;
        message = "Update Successfully";
    }
}

int myflowId = mfService.AddEditmyflow(mf);

我想根据functiontypefunctioncode检查重复项。另一个函数mfService.Getmyflows()可以返回数据库中当前添加的记录。

如何使用Linq检查重复?

1 个答案:

答案 0 :(得分:0)

首先,您使用的数据库是什么?许多数据库支持upsert行为(更新或插入取决于是否找到数据)。例如,MERGE in ms sqlMERGE in oracleINSERT .. ON DUPLICATE in mysql等。这可能是首选的解决方案。 Upsert通常是一个原子操作。

在您的特定情况下,您做交易吗?在确定重复项之后但是在插入记录之前,您确定没有人会插入数据吗?例如:

#1 thread               #2 thread

look for duplicates
...                     look for duplicate
no duplicates found     ...
                        no duplicates found
insert data_1
                        insert data_1

这将最终导致你试图避免重复。

根据您的代码,您从GUI填充数据并仅添加一个项目。

如果您可以访问myService代码,则可以通过两列向查询项添加方法,而不是通过mfService.Getmyflows()查询所有项目并查看代码中的此集合。它会更高效(特别是如果你在那些列中有索引)和更高的内存效率。

最后,可以轻松完成集合中单个元素的存在:

var alreadyExist = mfService.Getmyflows()
                            .Any(x => x.Column1 == value1 && x.Column2 == value2);