我是MVC的初学者,现在正在学习linq。 我想获得符合条件name = scott的价格列线的最低值。
我的控制员:
public ActionResult WherePriceMin()
{
var products = from p in repository.Products
where p.Name == "scott"
group p by p.Price into p
select new
{
scottMin = p.Min()
};
return View(products);
}
我的观点
@model IEnumerable<BawimySieLinq.Domain.Entities.Product>
@{
ViewBag.Title = "Products";
}
<h2>
Show All
</h2>
<div>
@Html.Partial("LinqLinks")
</div>
<div>
@Html.Partial("ProductSummary")
</div>
我的部分观点
@model IEnumerable<BawimySieLinq.Domain.Entities.Product>
<table class="table">
<tr>
<th>
@Html.DisplayNameFor(model => model.Name)
</th>
<th>
@Html.DisplayNameFor(model => model.Description)
</th>
<th>
@Html.DisplayNameFor(model => model.Category)
</th>
<th>
@Html.DisplayNameFor(model => model.Price)
</th>
<th>
@Html.DisplayNameFor(model => model.Quantity)
</th>
<th></th>
</tr>
@foreach (var item in Model)
{
<tr>
<td>
@Html.DisplayFor(modelItem => item.Name)
</td>
<td>
@Html.DisplayFor(modelItem => item.Description)
</td>
<td>
@Html.DisplayFor(modelItem => item.Category)
</td>
<td>
@Html.DisplayFor(modelItem => item.Price)
</td>
<td>
@Html.DisplayFor(modelItem => item.Quantity)
</td>
</tr>
}
</table>
我收到错误:
传递到字典中的模型项的类型为'System.Linq.Enumerable + WhereSelectEnumerableIterator'2 [System.Linq.IGrouping'2 [System.Decimal,BawimySieLinq.Domain.Entities.Product],&lt;&gt; f__AnonymousType1 '1 [BawimySieLinq.Domain.Entities.Product]]',但此字典需要类型为'System.Collections.Generic.IEnumerable'1 [BawimySieLinq.Domain.Entities.Product]'的模型项。
答案 0 :(得分:0)
您的观点需要此模型:
@model IEnumerable<BawimySieLinq.Domain.Entities.Product>
但是您从控制器返回的是IQueryable
,其中包含匿名对象类型参数(IQueryable<AnonymousType1>
)和select new
语句(在通过LINQPad检查查询结果时已经过验证)。
要返回适合视图的IEnumerable<Product>
对象,请将控制器代码更改为此对象:
public ActionResult WherePriceMin()
{
// notice additional "Product" model here
// add `AsEnumerable()` after the query if you don't sure
var products = from p in repository.Products
where p.Name == "scott"
group p by p.Price into p
select new Product
{
scottMin = p.Min()
};
return View(products);
}