2015-10-16 60 views
0

我是C#新手。對於我的作業,我必須顯示從列表中按等級(5到1)分組的影片。如何在LINQ中使用groupby?

我用下面的查詢,但環是給我的說法

listBox1.Items.Clear(); 

var sorted = from c in mediaInv 
      where c.MediaType == "Movie" 
      group c by c.Rating into movieRankings 
      orderby movieRankings descending 
      select movieRankings; 

//argumentexception here 
foreach (var x in sorted) 
{ 
    listBox1.Items.Add(x.ToString()); 
} 

回答

1

也許你只需要排序從5到1分的評價?我不明白,爲什麼你需要分組。 您可以按照評分對項目進行分組,但每個組都可以包含多個fils。那麼,你將如何處理這些組織呢?只需按評級降序顯示它們?所以,使用排序。

+0

這也許吧。因爲描述說組按收視率(5比1)而非常混亂。無論如何,我已經使用了您提供的解決方案。謝謝! –

0

對我個人而言,呃,當我使用lambda表達式時,更容易理解GroupBy

listBox1.Items.Clear(); 

var sorted = mediaInv.GroupBy(k => k.Rating, v=>v) 
    .OrderByDescending(kv => kv.Key) 
    .ToList(); 

//argumentexception here 
foreach (var x in sorted) 
{ 
    listBox1.Items.Add(x.Key.ToString()); 
} 

所以基本上,x將是一個KeyValuePair<TKey, TValue>。所以它將有一個.Key和一個.Value,你將需要使用。