public ActionResult Hotel_Read(string text)
{
var result = GetHotel().Where(c => c.Name.Contains(text) || c.City.Contains(text) || c.Country.Contains(text)).ToList();
return Json(result, JsonRequestBehavior.AllowGet);
}
private static IEnumerable<HotelViewModel> GetHotel()
{
using (TravelAgancyEntities1 db = new TravelAgancyEntities1())
{
var query = db.Hotels
.Include(p => p.City.Country).Distinct().ToList();
return query.Select(Hotel => new HotelViewModel
{
Name = Hotel.Name,
City = Hotel.City.City_Name,
**Line 10-** Country = Hotel.City.Country.Country_Name,//!!!
});
}
}
当我运行不带第10行的代码时,它运行成功,但是当使用第10行运行该代码时,它就无法运行。
答案 0 :(得分:1)
我认为您的代码应该正常运行。唯一让我怀疑的是,您正在尝试检索所有酒店表格数据以及另外两张表格(使用包含)
试试这个:
var q = (from x in db.Hotels.Include(c => c.City).Include(c => c.City.Country)
where x.Id == 5030
select x).Distinct().ToList();
string s = q[0].City.Country.Country_Name;
使用 Where 子句限制您的选择。
答案 1 :(得分:0)
此处不需要包含,因为创建HotelViewModel
实例时不涉及应用程序逻辑。
简单查询:
db.Hotels.Select(h => new HotelViewModel
{
Name = h.Name,
City = h.City.City_Name,
Country = h.City.Country.Country_Name,
}).ToList();
将从数据库中准确返回您需要的数据。
当您第一次执行包含,然后调用ToList();:
var query = db.Hotels.Include(p => p.City.Select(x => x.Country))
.Distinct()
.ToList();
您获取表格DB所有酒店属性,所有城市物业和 所有国家物业,而你真正需要的只是他们的名字。