模型类型错误:传递DbQuery而不是IGrouping

时间:2014-12-08 01:43:29

标签: c# linq entity-framework

有人能告诉我如何解决这个错误吗?

传递到字典中的模型项的类型是' System.Data.Entity.Infrastructure.DbQuery 1 [Project.ViewModels.TestViewModel]',但是这个字典需要一个类型&#的模型项39; System.Collections.Generic.IEnumerable 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 个答案:

答案 0 :(得分:0)

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

尝试将View模型更改为:

@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);

在这里更新组内的计数。