繁体   English   中英

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

[英]Checking duplication using LINQ in collection

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

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

首先,您使用什么数据库? 许多数据库都支持upsert行为(根据是否找到数据来更新或插入)。 例如, MERGE在MS SQLMERGE在Oracle中INSERT .. ON DUPLICATE在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);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM