在集合中使用 LINQ 检查重复项

本文关键字:检查 LINQ 集合 | 更新日期: 2023-09-27 17:57:44

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

    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 检查重复项?

在集合中使用 LINQ 检查重复项

首先,您使用什么数据库?许多数据库支持 upsert 行为(根据是否找到数据进行更新或插入(。例如,MERGE在ms sql中,MERGE在oracle中,INSERT .. ON DUPLICATE在mysql中等等。这可能是首选解决方案。更新插入通常是一个原子操作。

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

#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);