[英]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.