LINQ group by并返回所有结果

时间:2014-09-10 20:55:43

标签: c# linq

我找不到解决方法。我知道这里有很多主题,但没有一个(我找到的)对我有用。 所以这就是问题,我有这个:

   List<Products> testList = new List<Products>();

此列表包含两个字段,价格和库存。我想按某种条件对股票进行分组,但仍然显示所有结果。 我正在对这样的值进行分组:

  var stocks=testList.Where(item=> item.stock== "StocksFR1:").GroupBy(item=> item.stock);

这很好用。但是我想迭代所有的结果,而我却失败了。 我曾尝试过JOIN,但实际上我不知道哪个属性可以加入这些值。 任何人?谢谢!

更新:(输入列表示例:)

    Stock:        Price:
    StocksFR1:    14.55
    StocksFR1:    3.4
    StocksFRF:    1.1
    StocksFRA:    13.3

对于group,我希望得到这个输出:

    Stock:        Price:
    StocksFR1:    14.55, 3.4
    StocksFRF:    1.1
    StocksFRA:    13.3

2 个答案:

答案 0 :(得分:3)

好的,无视你的大部分内容并仅查看示例数据,您似乎想要这样:

var grouped = testList.GroupBy(item=> item.stock);
var eachStock = grouped.Select(c => string.Join(" ", c.Key, string.Join(", ", c.Select(x => x.price))));

Console.Write(string.Join(Environment.NewLine, eachStock));

这将完全符合您所写的内容。我怀疑你真的想要做字符串操作的东西,但我把它放在那里,这样你就可以在你再次需要Where子句之前轻松看到结果。

答案 1 :(得分:1)

我看不到你想要的东西,但如果你只想迭代试试这个:

var groups = testList.GroupBy(item=> item.stock);
foreach (var group in groups) // get the individual groups
{
  Console.Write(group.Key); // Will print "StocksFR1:" etc
  // well, I wont pretty print, up to you :)
  foreach (var item in group)
  {
    Console.Write(item.price); // Will print the price
  }
  Console.WriteLine();
}

请记住,GroupBy不返回组,它会返回一组组!