两个LIST解构相同,但数据不一致,现在需要挑选出不同的数据。
//新数据
private List<HrRyxxData> hrRyxxDatas = new List<HrRyxxData>();
//缓存的数据
private List<HrRyxxData> hrRyxxCacheDatas;
计算新数据相比于老数据来说,那些数据有了变化,返回一个List.
List中每个元素是一个tuple,tuple中两个项,第一个是新数据,第二个是老数据。
新数据(hrRyxxDatas)被做了添加、修改,但不删除。
老数据(hrRyxxCacheDatas),也就是上次的“新数据”。
对比后,得到最新更新的数据。
private List<(HrRyxxData, HrRyxxData)> tupleList;
/// <summary>
/// 差异数据
/// </summary>
public List<(HrRyxxData, HrRyxxData)> ChangedData
{
get
{
if (tupleList == null)
{
var changedData = (from newData in hrRyxxDatas
join oldData in hrRyxxCacheDatas
on newData.UID equals oldData.UID into var2Grp
from grp in var2Grp.DefaultIfEmpty()
select new
{
New = newData,
Old = grp
})
.Where(a => a.Old == null
|| a.New.XM != a.Old.XM
|| a.New.XBM != a.Old.XBM
|| a.New.BZLBM != a.Old.BZLBM
|| a.New.DQZTM != a.Old.DQZTM
|| a.New.SZDWH != a.Old.SZDWH)
.ToDictionary(x => x.New, x => x.Old);
tupleList = new List<(HrRyxxData, HrRyxxData)>();
foreach (var item in changedData)
{
tupleList.Add((item.Key, item.Value));
}
}
return tupleList;
}
}
数据处理。
HrRyxxObject hrRyxxObject = new HrRyxxObject();
foreach ((var NewData, var OldData) in hrRyxxObject.ChangedData)
{
Console.WriteLine("NewData:==>"+NewData?.ToString());
Console.WriteLine("OldData:" + OldData?.ToString());
}
使用tuple,命名tuple.