【问题标题】:Grouping objects by property value按属性值分组对象
【发布时间】:2013-03-16 09:30:20
【问题描述】:

我在弄清楚这一点时遇到了一些麻烦。我有一个包含两个属性的对象列表: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
}

但我不确定从那里做什么,才能真正将它们显示为分组项目。

非常感谢任何帮助!

【问题讨论】:

    标签: c# asp.net razor grouping


    【解决方案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>
    }
    

    【讨论】:

    • 谢谢布赖恩! :-) 工作就像一个魅力!
    【解决方案2】:

    这里是分组

    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>
    }
    

    顺便说一句,最好在控制器中创建 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))
                };
    

    【讨论】:

    • 非常感谢 :-) 我同意控制器中的 ViewModels。我要重构一下 ;-)
    • @bomortensen 我已经通过显示项目示例更新了答案
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-09-22
    • 2019-04-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多