簡體   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