[英]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);
我想检查基于functiontype
和functioncode
重复。 另一个函数mfService.Getmyflows()
可以返回数据库中当前添加的记录。
如何使用Linq检查重复项?
首先,您使用什么数据库? 许多数据库都支持upsert行为(根据是否找到数据来更新或插入)。 例如, MERGE
在MS SQL , MERGE
在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.