2014-09-10 129 views
-5

我有麻烦找到解决方案。我知道这里有很多话题,但没有一个(我发现的)适合我。 因此,这是一个问题,我有这样的: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 

而对照组,我想有这样的输出示例:

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

当遍历结果时,“失败”究竟是什么? – BradleyDotNET 2014-09-10 20:56:45

+4

为什么你需要'GroupBy',在你过滤Where后,你只会得到一个组。可能你只是在寻找'var stocks = testList.Where(item => item.stock ==“StocksFR1:”);'没有组 – Habib 2014-09-10 20:58:12

+2

Where'子句将天生*不*显示“所有结果。 “我也注意到,在你的'Where'谓词中,你正在列出'item.stock ==“StocksFR1:''。完成了吗?它可能是,但你确定你不是在寻找'item.stock.StartsWith(“StocksFR1:”)'或者那个效果? – 2014-09-10 20:59:04

回答

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

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

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不返回一组,它返回一组团体!