比较c#中两个不同列表中的每个项
本文关键字:列表 比较 两个 | 更新日期: 2023-09-27 18:15:53
我有两个项目列表,
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();
现在我想比较dBUpdate
和dBUpdate1
,如果药物名称相同,但其他详细信息已被修改,则应显示已修改和插入的药物的计数。
1。名称:"A"颜色:"红色"评论:"第一次插入"管理:"慢"
2。名称:"B"颜色:"绿色"评论:"第二次插入"管理:"慢"
第二次插入
1。名称:"A"颜色:"绿色"评论:"第一次插入"管理:"慢"
2。名称:"B"颜色:"绿色"评论:"第二次插入"管理:"慢"
在第二次插入中,我将A的颜色从"红色"改为"绿色",现在我应该显示更新计数为1。
有谁能帮我一下吗
我真的不知道这是否是最好的方法。但这是最简单的,也是我首先想到的:
int UpdateCount = 0;
foreach (DataExcel item in dBUpdate)
{
if(!dBUpdate1.Contains(item))
{
UpdateCount++;
}
}
可以这样做:
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具有相同的名称,并且在颜色,评论或管理中有不同的条目时。所以这是一个所有被改变的药物的列表,在最后简单地计数。
你可以试试这个:
// 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++;
}
}
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.