Nil*_*mag 2 linq ajax jquery entity-framework asp.net-mvc-4
作为Multiplesight提供的OdeToFood培训计划的一部分。
错误信息:
EntityFramework.SqlServer.dll中发生类型为'System.NotSupportedException'的异常,但未在用户代码中处理
附加信息:不能在LINQ to Entities查询中构造实体或复杂类型'OdeToFood.Models.RestaurantListViewModel'。
错误来自(_Restaurant.cshtml):
@model IEnumerable<OdeToFood.Models.RestaurantListViewModel>
<div id="restaurantList">
@foreach (var item in Model)
{
<div>
<h4>@item.Name</h4>
<div>
@item.City, @item.Country
</div>
<div>
Reviews: @item.CountOfReviews
</div>
<hr />
</div>
}
</div>
Run Code Online (Sandbox Code Playgroud)
Index.cshtml
@model IEnumerable<OdeToFood.Models.RestaurantListViewModel>
@{
ViewBag.Title = "Home Page";
}
<form method="get" action="@Url.Action("Index")"
data-otf-ajax="true" data-otf-target="#restaurantList">
<input type="search" name="searchTerm" />
<input type="submit" value="Search By Name" />
</form>
@Html.Partial("_Restaurants", Model)
Run Code Online (Sandbox Code Playgroud)
HomeController.cs
using OdeToFood.Models;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Data.Entity;
using System.Web;
using System.Web.Mvc;
namespace OdeToFood.Controllers
{
public class HomeController : Controller
{
OdeToFoodDb _db = new OdeToFoodDb();
public ActionResult Index(string searchTerm = null)
{
var model =
_db.Restaurants
.OrderByDescending(r => r.Reviews.Average(review => review.Rating))
.Where(r => searchTerm == null || r.Name.StartsWith(searchTerm))
.Take(10)
.Select(r => new RestaurantListViewModel
{
Id = r.Id,
Name = r.Name,
City = r.City,
Country = r.Country,
CountOfReviews = r.Reviews.Count()
});
if (Request.IsAjaxRequest())
{
return PartialView("_Restaurants", model);
}
return View(model);
}
public ActionResult About()
{
var model = new AboutModel();
model.Name = "Tom";
model.Location = "NYC, USA";
return View(model);
}
public ActionResult Contact()
{
ViewBag.Message = "Your contact page.";
return View();
}
protected override void Dispose(bool disposing)
{
if (_db != null)
{
_db.Dispose();
}
base.Dispose(disposing);
}
}
}
Run Code Online (Sandbox Code Playgroud)
我在这里缺少什么吗?对于初学者来说,这个问题没有得到很好的记录,所以我提出了一个问题。如果这是一个愚蠢的错误,我深表歉意。
这是因为数据库对您一无所知RestaurantListViewModel,因此EntityFramework无法为此构造底层SQL查询。
因此,打电话.ToList()应解决问题。
var model =
_db.Restaurants
.OrderByDescending(r => r.Reviews.Average(review => review.Rating))
.Where(r => searchTerm == null || r.Name.StartsWith(searchTerm))
.Take(10)
// The key is here
.ToList()
.Select(r => new RestaurantListViewModel
{
Id = r.Id,
Name = r.Name,
City = r.City,
Country = r.Country,
CountOfReviews = r.Reviews.Count()
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
542 次 |
| 最近记录: |