比较两个集合的数据

本文关键字:集合 数据 两个 比较 | 更新日期: 2023-09-27 17:59:15

我有两个可观察的集合1.TruckItems2.TruckItemsComparison。两者完全相同。

我将数据从EF6加载到第一个TruckItems集合,然后10秒后将数据加载到第二个集合TruckItemsComparison。现在,添加到我的第二个集合中的新数据可能最近从另一个来源更新了,我只需要添加第一个集合中还不存在的最新数据。

我想检查我的第二个收藏中是否有任何id与我的第一个收藏中的任何id不匹配,然后只添加不匹配的项目。

代码:

这是我加载数据的地方:

private async void LoadTrucks()
{
    using (TruckServiceClient service = new TruckServiceClient())
    {
        var items = await service.GetTrucksAsync();
        if (TruckItems.Count == 0)
        {
            foreach (var item in items)
            {
                TruckItems.Add(new TruckItems
                {
                    TruckId = item.TruckId,
                    TruckQuoteId = item.QuoteId,
                    TruckPhaseId = item.CurrentPhaseId,
                    TruckChassisManufacturer = item.ChassisManufacturer,
                    TruckChassisModel = item.ChassisModel,
                    TruckStatus = item.Status,
                    TruckJobNumber = item.JobNumbers,
                    TruckAddedBy = item.AddedBy,
                    TruckClientName = item.ClientName,
                    TruckClientSurname = item.ClientSurname,
                    TruckClientDetail = item.ClientDetail,
                    TruckCurrentPhase = item.CurrentPhase
                });
            }
        }
        foreach (var item in items)
        {
            TruckItemsComparison.Add(new TruckItems
            {
                TruckId = item.TruckId,
                TruckQuoteId = item.QuoteId,
                TruckPhaseId = item.CurrentPhaseId,
                TruckChassisManufacturer = item.ChassisManufacturer,
                TruckChassisModel = item.ChassisModel,
                TruckStatus = item.Status,
                TruckJobNumber = item.JobNumbers,
                TruckAddedBy = item.AddedBy,
                TruckClientName = item.ClientName,
                TruckClientSurname = item.ClientSurname,
                TruckClientDetail = item.ClientDetail,
                TruckCurrentPhase = item.CurrentPhase
            });
        }
    }
}

这里是我想比较我的两个收藏:

public void UpdateTrucks()
{
    LoadTrucks();
    if (TruckItems.Count != 0)
    {
        var truckItemsId = TruckItems.Where(x => x.TruckId != 0).First().TruckId;
        foreach (var item in TruckItemsComparison.Where(x => x.TruckId != truckItemsId))
        {
            TruckItems.Add(item);
        }
    }
}

我的问题是,它将来自两个集合的数据添加在一起,而不管id是否对应。很明显,我在这里的逻辑不起作用,所以有人能告诉我如何比较数据,并只插入我的TruckItems集合中还不存在的id吗。谢谢,如果您需要任何更多信息,请告诉我。

比较两个集合的数据

您可以使用Except:枚举TruckItemsComparison中的每个项目

public void UpdateTrucks()
{
    LoadTrucks();
    if (TruckItems.Count != 0)
    {
        foreach (var item in TruckItemsComparison.Except(TruckItems))
        {
            TruckItems.Add(item);
        }
    }
}

如果你只想比较你的TruckItems的Id,那么你就可以实现你自己的IEqualityComparer:

internal class TruckItemsComparer : IEqualityComparer<TruckItems>
{
    #region IEqualityComparer Members
    public bool Equals(TruckItems x, TruckItems y)
    {
        return (((x == null) && (y == null)) ||
            ((x != null) && (y != null) && x.TruckId == y.TruckId));
    }
    public int GetHashCode(TruckItems obj)
    {
        return obj. TruckId.GetHashCode();
    }
    #endregion
}

然后像这样使用:

foreach (var item in TruckItemsComparison.Except(TruckItems, new TruckItemsComparer()))