我的数据库中有以下表格:
- 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)
答案 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);