ASP.MVC GroupBy

时间:2016-12-12 07:55:21

标签: sql entity-framework linq model-view-controller group-by

我必须参加并尝试他们的小组,但我无法让它工作。

当我运行它时,我得到以下错误,我认为这是因为我尝试将GroupBy解析为ToDictionary(),请参阅控制器方法。但在视图中它使用IEnumerable。在某种程度上,我需要将Dictionary解析为视图。但我不知道怎么做。

你有什么想法我怎样才能解决这个问题?

  

传递到字典中的模型项是以下类型:   System.Collections.Generic.List 1 [System.Collections.Generic.KeyValuePair 2[System.String,System.Int32]]

     

但是这个字典需要一个类型为

的模型项      

System.Collections.Generic.IEnumerable 1 [aProejct.Models.Database.Properties]`。

这里我有我的Controller方法:

    public ActionResult Test()
    {
        var group = db.Propertiess.AsNoTracking().GroupBy(x => x.PropertiesName).ToDictionary(g => g.Key, g => g.Count());


        return View(group.ToList());
    }

我的观点

model IEnumerable<aProject.Models.Database.Properties>

@{
    Layout = null;
}

<!DOCTYPE html>

<html>
<head>
    <meta name="viewport" content="width=device-width" />
    <title>Test</title>
</head>
<body>
    <p>
        @Html.ActionLink("Create New", "Create")
    </p>

    <ul>
        @foreach (var group in Model.GroupBy(item => item.PropertiesName)) { 

        <li>
            @Html.Encode(group.Key)
            <ul>

               @foreach (var item in group)
               {
                <li>
                    @Html.Encode(item.SubPropertiess)
                </li>
              } 

            </ul>
        </li>

       }
    </ul>
</body>
</html>

1 个答案:

答案 0 :(得分:0)

在您的控制器中,您正在执行.ToDictionary(g => g.Key, g => g.Count());,它返回KeyValue字典,其中Key为PropertiesName,Value是与该组匹配的条目数。

我真的不认为这是你想要的。您实际上并没有以任何方式将这些组中的项目传递给视图。

g实际上是包含您的属性的可枚举,因此您还需要确保将其传递给视图以便迭代它们。

编辑:从您的代码中看起来 - 您还没有真正使用Count。尝试将g(包含组中的项目)作为值传递,而不是执行Count()。然后,您应该可以在视图中为模型使用List<string, IEnumerable<Property>>之类的内容。

如果您以后确实需要计数,则可以在视图中对值进行计数。

但我建议您为视图创建一个真正的viewmodel类,控制器可以设置视图可能需要的所有内容,以使您的视图尽可能简单。