如果第二个结果得到相同的记录,则MVC EF第一个结果查询被第二个结果替换

时间:2016-01-16 17:44:47

标签: asp.net-mvc entity-framework entity-framework-5

我使用了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中的“豪华”则丢失了。

你有什么建议吗?

1 个答案:

答案 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