【问题标题】:Linq to Objects Sum to ListLinq to Objects Sum to List
【发布时间】:2013-04-07 02:14:00
【问题描述】:

我正在设计一个接受List<Bar> 并返回<List>BarGroup 并按Bar.barName 分组的方法。我的猜测是我需要将 Aggregate 与 List.Add 一起使用,但我对 lambdas 和 Linq 的语法还很陌生!

到目前为止我的代码:

public class BarGroup
{
   public string barName;
   public List<Bar> barList;
}

public class Bar
{
   public string barName;
   public string fooDetails;

   public Bar(string b, string f)
   {
       this.barName = b;
       this.fooDetails = f;
   }
}

void Main()
{
    Bar bar1 = new Bar("BarGroup1","Bar1");
    Bar bar2 = new Bar("BarGroup1","Bar2");
    Bar bar3 = new Bar("BarGroup2", "Bar3");
    Bar bar4 = new Bar("BarGroup2", "Bar4");

    List<Bar> bars = new List<Bar> { bar1, bar2, bar3, bar4 };

    var barGrouped = from b in bars
                group b by b.barName into g
                select new BarGroup()
                {
                    barName = g.Key, 
                    barList = bars
                };

    Console.WriteLine(barGrouped);
}

当我在 LinqPad 中尝试这个时,我得到以下结果:

IEnumerable<BarGroup> (2 items)
barName     barList 
BarGroup1   List<Bar> (4 items)
            barName    fooDetails 
            BarGroup1  Bar1 
            BarGroup1  Bar2 
            BarGroup2  Bar3 
            BarGroup2  Bar4 

BarGroup2   List<Bar> (4 items)
            barName    fooDetails 
            BarGroup1  Bar1 
            BarGroup1  Bar2 
            BarGroup2  Bar3 
            BarGroup2  Bar4 

但我正在寻找的内容如下:

IEnumerable<BarGroup> (2 items)
barName     barList 
BarGroup1   List<Bar> (4 items)
            barName    fooDetails 
            BarGroup1  Bar1 
            BarGroup1  Bar2 

BarGroup2   List<Bar> (4 items)
            barName    fooDetails 
            BarGroup2  Bar3 
            BarGroup2  Bar4 

我认为 Linq 是此类拆分的最佳选择,但我愿意接受任何其他完成相同任务的方法。

【问题讨论】:

    标签: c# linq linq-to-objects


    【解决方案1】:

    试试

    var barGrouped = from b in bars
                group b by b.barName into g
                select new BarGroup()
                {
                    barName = g.Key, 
                    barList = g.ToList()
                };
    

    组是满足分组条件的IEnumerable&lt;Bar&gt;。 bar 是原始集合,这就是为什么在您的 BarGroups 中您可以获得所有项目。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-03-03
      • 2011-10-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多