Linq - 获取具有不包含另一个列表中的值的列表属性的对象

时间:2014-04-04 15:20:14

标签: c# linq

我觉得自己是个完全白痴,不能自己解决这个问题。

我有一个名为ExistingBookings的“预订”对象列表。我还有一个ObservableCollection的“Count”对象,每个对象都有一个“Bookings”属性,它是一个“Booking”对象列表。

使用Linq,如何选择“Bookings”属性中不包含ExistingBookings中任何“Booking”对象的所有Count对象?

List<Booking> ExistingBookings = new List<Booking>();
ExistingBookings.Add(Booking1);
ExistingBookings.Add(Booking2);

Count1 = new Count();
Count1.Bookings.Add(Booking2);
Count1.Bookings.Add(Booking3);

Count2 = new Count();
Count1.Bookings.Add(Booking3);
Count1.Bookings.Add(Booking4);

List<Count> counts = new List<Count>();
counts.Add(Count1);
counts.Add(Count2);

我希望输出是只包含Count2的Count对象列表,因为它们的Booking对象都不存在于ExistingBookings中。

请让我摆脱痛苦:(

2 个答案:

答案 0 :(得分:2)

假设您的Booking类正确实现了相等和哈希码,您可以使用:

var result = counts.Where(c => !c.Bookings.Intersect(ExistingBookings).Any());

答案 1 :(得分:1)

counts.Where(c => c.Bookings.All(b => !ExistingBookings.Contains(b)));