[c#]模型类型错误︰ 传球而不是 IGrouping DbQuery

发布时间: 2017/2/28 21:37:57
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

谁能告诉我如何解决此错误吗?

传递到字典的模型项的类型是 'System.Data.Entity.Infrastructure.DbQuery 1[Project.ViewModels.TestViewModel]',但这本词典需要的类型的模型项' 如 1[System.Linq.IGrouping'2[System.String,Project.ViewModels.TestViewModel]]'。

视图模型

public class TestViewModel
{
    public string Name { get; set; }
    public int NameCount {get; set; }
    public int NameSum { get; set; }
    public double NameAverage { get; set; }
}

操作方法

var groupedfListItems = db.FListItems.Include(f => f.FList)
                                     .Include(f => f.Item)
                                     .GroupBy(g => g.Item.Name)
                                     .Select(lg =>
                                     new TestViewModel
                                     { 
                                         Name = lg.Key, 
                                         NameCount = lg.Count(),
                                         NameSum = lg.Sum(w => w.Score), 
                                         NameAverage = lg.Average(w => w.Score)
                                      });
return View(groupedfListItems);

我已经试过将追加 AsEnumerable()ToList() 没有成功。

视图

@model IEnumerable<IGrouping<string, Project.ViewModels.TestViewModel>>

<table class="table">

@foreach (IGrouping<string, Project.ViewModels.TestViewModel> item in Model)
{
    <tr>
        <td>
            @Html.DisplayFor(modelItem => item.Key)
        </td>
        <td>
            @item.Count()
        </td>

        @foreach (var i in item)
        {
            <td>
                @Html.DisplayFor(modelItem => i.Name)
            </td>
            <td>
                @Html.DisplayFor(modelItem => i.NameAverage)
            </td>
            <td>
                @Html.DisplayFor(modelItem => i.NameCount)
            </td>
            <td>
                @Html.DisplayFor(modelItem => i.NameSum)
            </td>
        }
    </tr>
}

</table>

解决方法 1:

预期在您的视图的类型是 IEnumerable<IGrouping<string, Project.ViewModels.TestViewModel>> 但是您传递的类型是 IQueryable<TestViewModel> 错误只指出这点。

试着去改变到视图模型︰

@model IEnumerable<Project.ViewModels.TestViewModel>

或更改对您的代码后面的查询︰

var groupedfListItems = db.FListItems.Include(f => f.FList)
                                 .Include(f => f.Item)
                                 .Select(lg =>
                                 new TestViewModel
                                 { 
                                     Name = lg.Item.Key,
                                  })
                                 .GroupBy(g => g.Name);

在这里更新内部组计数。

官方微信
官方QQ群
31647020