我使用了Entity Framework 5。 我有一个桌子酒店,里面有一系列房型。
当我想通过循环每个roomType的函数找到哪个酒店有以下roomTypes并合并结果。如果第二个结果包含相同的记录,则第一个结果被第二个结果替换。
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家酒店列入名单&gt;。
然后第二个结果返回 HotelA 和 HotelC ,其中HotelA包含roomType“套房”的集合。
当这个结果出现时,第一个结果的HotelA与第二个结果中的HotelA相同,第二个结果只在roomTypes集合中持有“套房”,而在hotelA中的“豪华”则丢失了。
你有什么建议吗?
答案 0 :(得分:0)
使用AddRange方法。您还可以清理您的回购功能。
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.AddRange(partialHotel);
}
return Json(hotels);
}
public List<Hotel> GetHotelsFromRoomType(string roomType) {
List<Hotel> hotelsWithRoomType = db.Hotels
.Include(h => h.RoomTypes)
.Where(h => h.RoomTypes.Any(r => r.name.Equals(roomType))
.ToList();
return hotels;
}
https://msdn.microsoft.com/en-us/library/z883w3dc%28v=vs.110%29.aspx?f=255&MSPPError=-2147217396