2014-09-10 180 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不返回一組,它返回一組團體!