比较c#中两个不同列表中的每个项目

时间:2014-08-01 09:46:46

标签: c# sql

我有两个项目列表,

public class DataExcel
{
    public String Name{ get; set; }
    public String Color { get; set; }
    public String Comments { get; set; }
    public String Management { get; set; }
}

// before inserting data into DB i am fetching all the values into a List

//This method will get all the details from Db
List<DataExcel> dBUpdate = GetAllExistingDrugList();

//some logic to insert data into DB                 
//After inserting the data again i am fetching all the values into another List

List<DataExcel dBUpdate1  = GetAllExistingDrugList();

现在我想比较dBUpdatedBUpdate1,如果药物名称相同但其他细节已被修改,那么我应该显示已修改和插入的药物数量。< / p>

我插入的第一次插入示例

1.Name: “A” 红色” 评论:“第一次插入” 管理层:“慢”

2.Name: “B” 颜色:“绿色” 评论:“第2次插入” 管理层:“慢”

第二次插入

1.Name: “A” 颜色:“绿色” 评论:“第一次插入” 管理层:“慢”

2.Name: “B” 颜色:“绿色” 评论:“第2次插入” 管理层:“慢”

所以在“,第二次插入我已经将”A“的颜色从”红色“改为”绿色“现在我应该将更新计数显示为1。

任何人都可以帮助我

4 个答案:

答案 0 :(得分:0)

我真的不知道这是不是最好的方法。但这是我发生的最简单也是第一件事:

int UpdateCount = 0;
foreach (DataExcel item in dBUpdate)
{
    if(!dBUpdate1.Contains(item))
    {
       UpdateCount++;
    }
}

答案 1 :(得分:0)

这样的事情可行:

var count = (from d1 in dBUpdate join d2 in dBUpdate1 on d1.Name equals d2.Name
                where d1.Color != d2.Color || d1.Comments != d2.Comments || d1.Management != d2.Management
                select d1).Count();

两个列表都已连接,但仅当d1和d2具有相同的名称且颜色,注释或管理中有不同的条目时才会加入。因此,它是所有已更改药物的清单,最终只是计算在内。

答案 2 :(得分:0)

你可以尝试这个:

// counter
int updatedRecords = 0;

foreach(var dataExcel in dBUpdate)
{
    // Find the associated record for the dataExcel in the second list.
    var dataExcel1 = dBUpdate1.SingleOrDefault(x=>x.Name==dataExcel.Name);

    // If the associated record found check if anything changed 
    // to it's properties values.
    if(dataExcel1!=null)
    {
        // If any change has been made, update the counter.
        if(dataExcel1.Color!= dataExcel.Color || 
           dataExcel1.Comments != dataExcel.Comments || 
           dataExcel1.Management != dataExcel.Management )
            updatedRecords++;
    }
}

答案 3 :(得分:0)

int count = 0;

dBUpdate.ForEach(dbu =>
{
       dBUpdate1.Where(dbu1 => dbu1.Name.Equals(dbu.Name)).ToList().ForEach(dbu11 =>
       {
              if (!dbu11.Color.Equals(dbu.Color) || !dbu11.Comments.Equals(dbu.Comments) || 
                        !dbu11.Management.Equals(dbu.Management))
                 {
                    count++;
                 }
        });

});

We can use linQ expressions also.