传递到字典中的模型项是类型...但是此字典需要类型的模型项

时间:2016-10-22 04:34:38

标签: asp.net-mvc linq

我是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]'的模型项。

1 个答案:

答案 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);
}