按属性值对对象进行分组

时间:2013-03-16 09:30:21

标签: c# asp.net razor grouping

我在解决这个方面遇到了一些麻烦。我有一个包含两个属性的对象列表:AliasValue

我需要显示这些对象的列表,其中Alias属性按Value字符串值分组。像这样:

MyAlias1, MyAlias2, MyAlias3
     - Value string which is the same for above three aliases

MyAlias4, MyAlias5
     - Value string which is the same for above three aliases

到目前为止我所拥有的是:

var groups = lst.GroupBy(x => new { x.Alias, x.Value });
foreach(var group in groups)
{
    @group.Value
}

但是我不知道该怎么做,实际上将它们显示为分组项目。

非常感谢任何帮助!

2 个答案:

答案 0 :(得分:1)

我认为您需要按值进行分组,然后对于每个组,您可以打印出您需要的内容:

@{ var groups = lst.GroupBy(x => x.Value); }

@foreach (var group in groups)
{
    var aliasString = String.Join(",", group.Select(x => x.Alias));
    <p>@aliasString</p>
    <p>- @group.Key</p>
}

答案 1 :(得分:0)

这是分组

var groups = lst.GroupBy(x => x.Value);

这里显示

@foreach(var group in groups)
{
    <h3>@group.Key</h3>
    <ul>
    @foreach(var alias in group)
    {
        <li>@alias.Alias</li>
    }
    </ul>
}

BTW最好在控制器中创建ViewModel,然后在视图中执行Linq:

public class FooViewModel
{
    public string Value { get; set; }
    public string Aliases { get; set; } // if you need concatenated string 
}

在控制器中:

var model = from x in lst
            group x by x.Value into g
            select new FooViewModel {
               Value = g.Key,
               Aliases = String.Join(", ", g.Select(i => i.Alias))
            };