我有两个名为currentHourList
的名单,另一个名为item.DealerOperatingHourList
。
我的目标是创建一个名为removedHours
的第三个列表,其中currentHourList
与item.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}}
但结果总是为空。不知道为什么,因为这对我项目中的类似情况有效。
我的代码确实有效,错误出现在我的应用程序的不同部分
答案 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));
我在应用程序的其他地方发现了错误。