我有在数据库中插入记录的功能。我想确保数据库中没有重复的条目。函数首先检查是否有查询字符串参数。如果有,那么它就像编辑模式,否则插入模式。有一个函数可以返回数据库中当前添加的记录。在插入数据库之前,我需要根据两列检查重复。
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检查重复?
答案 0 :(得分:0)
首先,您使用的数据库是什么?许多数据库支持upsert行为(更新或插入取决于是否找到数据)。例如,MERGE
in ms sql,MERGE
in oracle,INSERT .. 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);