比较两个列表并将差异添加到第三个列表

时间:2014-01-02 15:49:00

标签: c# linq

我有两个名为currentHourList的名单,另一个名为item.DealerOperatingHourList

我的目标是创建一个名为removedHours的第三个列表,其中currentHourListitem.DealerOperatingHourList进行比较,并添加currentHourList但不在item.DealerOperatingHourList中的项目**Current Hour List** OperatingHourID ---- 80 81 82 83 **DealerOperatingHour List** OperatingHourID ---- 80 81 83 **Removed Hour List** OperatingHourID ---- 82

我确信这很令人困惑,所以这里有一个我想要列表的例子

var removedHours = currentHourList.Where(m => !item.DealerOperatingHourList.Select(l => l.OperatingHourID).Contains(m.OperatingHourID));

我尝试过使用这个LINQ语句:

{{1}}

但结果总是为空。不知道为什么,因为这对我项目中的类似情况有效。

修改

我的代码确实有效,错误出现在我的应用程序的不同部分

3 个答案:

答案 0 :(得分:1)

您需要Except功能:

var removedHours = currentHourList.Except(item.DealerOperatingHourList)

答案 1 :(得分:1)

正如另一个想法,你可以像AlexH建议的那样使用Except方法,但你也可以像这样实现IEqualityComparer:

public class HourListComparer : IEqualityComparer<Hour>
{
    public bool Equals(Hour x, Hour y)
    {
        return x != null && y != null && x.OperatingHourID == y.OperatingHourID;
    }

    public int GetHashCode(Hour obj)
    {
        return obj.OperatingHourID.GetHashCode();
    }
}

该示例中的小时,是来自HourListComparer对象的自定义对象。 然后像这样使用:

var removedHours = currentHourList.
      Except(item.DealerOperatingHourList, new HourListComparer());

答案 2 :(得分:0)

我的上述代码确实有效:

var removedHours = currentHourList.Where(m => !item.DealerOperatingHourList.Select(l => l.OperatingHourID).Contains(m.OperatingHourID));

我在应用程序的其他地方发现了错误。