使用Linq在Entity Framework中使用IN子查询

时间:2017-05-16 18:24:15

标签: entity-framework linq subquery

我的数据库中有以下表格:

- Reservation
- TrainStation
- Train
- Traveller
- Reservation_Traveller
- TrainSeats: Attributes are: Train_Id, Seat, Traveller_Id

我想找到特定预订的TrainSeats行

我有一个Reservation对象,其中包含ICollection<Traveller>属性,其中包含我想从TrainSeats表中删除其座位的旅行者。我从数据库中获取了预订对象,如下所示:

var reservation = db.Reservation.Where(r => r.Id == id).FirstOrDefault();

所以我想做这样的事情:

db.TrainSeats.Where(ts => ts.Traveller_Id IN reservation.Travellers)

1 个答案:

答案 0 :(得分:1)

首先选择旅行者ID:

var ids=reservation.Travellers.Select(e=>e.Id);

然后使用Contains扩展方法,该方法在sql:

中被翻译为IN
var query=db.TrainSeats.Where(ts => ids.Contains(ts.Traveller_Id));

我想如果您使用FK属性和导航属性,则可以在一个查询中执行此操作:

var query= db.Travellers.Where(e=>e.ReservationId==id).SelectMany(t=>t.TrainSeats);