比较两个集合数据

时间:2016-07-29 10:35:44

标签: c# wpf

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

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

我想检查我的第二个集合中的任何ID是否与我的第一个集合中的任何ID都不匹配,然后只添加不匹配的项目。

CODE:

这是我加载数据的地方:

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。如果您需要任何更多信息,请与我们联系。

1 个答案:

答案 0 :(得分:1)

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

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()))