"分组#34;使用LINQ和动态匿名类型

时间:2014-12-05 02:46:50

标签: linq

我正在编写ASP .NET MVC网站,而且我遇到了LINQ问题。我有一个简单的课程

public class Tag
{
    public int TagId { get; set; }
    public string Nome { get; set; }
    ... [other props]....

}

我想向视图传递一组分组的Nome。我尝试使用以下LINQ代码生成列表

var teste = (from t in db.Tags
                    group t by t.Nome into g
                    select new
                    {
                        Nome = g.Key
                    }).ToList();
ViewBag.ListaTags = teste;

没关系,但如果我在视图中使用以下代码

@foreach (var item in ViewBag.ListaTags)
{
     @item.Nome
}

我收到一条错误消息,指出该对象项没有Nome属性。如果我尝试@item而不是@ item.Nome,它会显示{Nome =“Test”}。就像我有一个对象,但我无法访问它的属性。

2 个答案:

答案 0 :(得分:0)

分组后,您将拥有格式化的结构,如::

Group.key1=> [value1,value2,value3],
Group.key2=> [value1,value2,value3],
Group.key3=> [value1,value2,value3]

如果你想显示分组的内容,那么你应该选择Grouped值,其Key为::

var teste = (from t in db.Tags
                    group t by t.Nome into g
                    select new
                    {
                        Nome = g.Key,
                        Id=g
                    }).ToList();

然后你可以在客户端显示为::

@foreach (var item in ViewBag.ListaTags)
{
    <p>@item.Key  </p>
    foreach (var subitem in item.Values)
    {
        @subitem    
    }

}

答案 1 :(得分:0)

请看看这个Marc的answer。您可以转义POCO类并返回该对象,而不是返回匿名类型: -

var teste = (from t in db.Tags
                         group t by t.Nome into g
                         select new Nome
                         {
                             groupedNome = g.Key
                         }).ToList();

我在这里使用的POCO课程是: -

public class Nome
{
     public string groupedNome { get; set; }
}

然后,您可以在View中将其用作: -

@foreach (var item in ViewBag.ListaTags)
{
     @item.groupedNome
}