【问题标题】:Compare two object lists with LINQ on specific property在特定属性上使用 LINQ 比较两个对象列表
【发布时间】:2014-06-04 09:14:19
【问题描述】:

我有这两个列表(其中 SelectListItem 中的 Value 是一个 bookingid):

List<SelectListItem> selectedbookings;
List<Booking> availableBookings;

我需要从selectedBookings 中找到不在availableBookings 中的ID。下面的 LINQ 加入只会让我得到 availableBookings 中的 bookingid,我不知道如何反过来。

!= 无法工作,因为我正在比较字符串。

results = (
  from s in selectedbookings
  join a in availableBookings on s.bookingID.ToString() equals a.Value
  select s);

【问题讨论】:

  • 是什么让您认为!= 由于使用字符串而无法工作? (您不能以独占方式进行连接,但这与字符串无关......)
  • 我试过=,它说a不在equals左侧的范围内。我推测它与= 符号有关。
  • 对,那是因为join 总是使用equals 来表示这两个部分——但同样,这与字符串无关。
  • 啊,当然。糟糕的推理......

标签: c# linq join


【解决方案1】:

我需要从 selectedBookings 中找到不在 availableBookings 中的 id。

这很简单 - 这是所选预订中的所有 ID除了可用预订中的那些:

var ids = selectedBookings.Select(x => x.bookingID.ToString())
                          .Except(availableBookings.Select(x => x.Value));

或许更易读:

var selectedIds = selectedBookings.Select(x => x.bookingID.ToString());
var availableIds = availableBookings.Select(x => x.Value);
var result = selectedIds.Except(availableIds);

【讨论】:

  • 谢谢,不过我更喜欢精简版。
  • @Niklas:你是说第一个?没关系 - 第二个真的只是试图解开它,以防你在理解它时遇到问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多