从表中获取多个数据使用Entity Framework

时间:2017-04-07 10:45:58

标签: c# asp.net-mvc entity-framework

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行运行该代码时,它就无法运行。

enter image description here

2 个答案:

答案 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所有酒店属性,所有城市物业和 所有国家物业,而你真正需要的只是他们的名字。