【问题标题】:ASP.MVC GroupByASP.MVC GroupBy
【发布时间】:2017-04-27 01:16:07
【问题描述】:

我必须实体,我尝试按他们分组,但我无法让它工作。

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

您有什么想法可以解决这个问题吗?

传入字典的模型项的类型为: System.Collections.Generic.List1[System.Collections.Generic.KeyValuePair2[System.String,System.Int32]]

但是这个字典需要一个类型的模型项:

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

这里有我的控制器方法:

    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>

【问题讨论】:

  • 错误在您的视图中。尝试像 @model List. 一样管理它
  • 如果仍然出错,只需关注您的组变量,然后无论出现什么类型,将其添加到模型中。
  • 谢谢,我会试试 :)
  • 你也不应该真的需要在你的视图中做 GroupBy,因为你已经在你的控制器动作中对项目进行分组。

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


【解决方案1】:

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

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

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

编辑:从您的代码中的样子来看,您实际上并没有真正使用Count。尝试将您的g(包含组中的项目)作为值传递,而不是使用Count()。然后你应该能够在你的视图中为你的模型使用类似List&lt;string, IEnumerable&lt;Property&gt;&gt;的东西。

如果您稍后确实需要 Count,您可以在您的视图中对值执行 Count。

不过,我建议考虑为您的视图创建一个真正的视图模型类,其中视图可能需要的所有内容都可以由控制器设置,以使您的视图尽可能简单。

【讨论】:

    猜你喜欢
    • 2018-03-20
    • 1970-01-01
    • 2023-03-08
    • 1970-01-01
    • 1970-01-01
    • 2012-01-20
    • 1970-01-01
    • 1970-01-01
    • 2011-07-03
    相关资源
    最近更新 更多