【发布时间】:2016-01-16 17:44:46
【问题描述】:
我使用了实体框架 5。 我有一家桌子酒店,里面有很多房间类型。
当我想通过循环每个房间类型的函数并合并结果来查找哪个酒店具有以下房间类型时。如果第一个结果包含相同的记录,则将其替换为第二个结果。
Model
public class Hotel {
public int id { get; set; }
public string hotelName { get; set; }
[ForeignKey("HotelId")]
public ICollection<RoomType> RoomTypes { get; set; }
}
public class RoomType {
public int id { get; set; }
public string name { get; set; }
public int hotelId { get; set; }
}
Caller
public JsonResult GetHotelByRoomTypes(string[] roomTypeNames) {
List<List<Hotel>> hotels = new List<List<Hotel>>();
foreach (string roomTypeName in roomTypeNames) {
List<Hotel> partialHotel = hotelRepo.GetHotelsFromRoomType(roomTypeName);
hotels.Add(partialHotel);
}
return Json(hotels);
}
HotelRepo
public List<Hotel> GetHotelsFromRoomType(string roomType) {
List<RoomType> roomTypes = db.RoomTypes.Where(r => r.name.Equals(roomType)).ToList();
copy hotelId from roomTypes into int[] hotelIds
List<Hotel> hotels = db.Hotels.Where(h => hotelIds.Contains(h.id)).ToList();
return hotels
}
我的问题是如果我发送了 2 个房间类型 [“豪华”、“套房”]。然后我得到了 HotelA 和 HotelB 的列表作为第一个结果。它们都包含“豪华”房间类型的集合。之后,我将这 2 家酒店放入 List>。
然后第二个结果返回HotelA和HotelC,其中HotelA包含房间类型“套房”的集合。
发生这种情况时,第一个结果的 HotelA 将与第二个结果的 HotelA 相同,后者在 roomTypes 集合中仅包含“suite”,而 hotelA 中的“deluxe”缺失。
你有什么建议吗?
【问题讨论】:
标签: asp.net-mvc entity-framework entity-framework-5