如何在LINQ中使用groupby?

时间:2015-10-16 03:34:53

标签: c# .net linq

我是C#的新手。对于我的作业,我必须显示从列表中按等级(5到1)分组的电影。

我使用了以下查询,但循环给出了我的参数

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());
}

2 个答案:

答案 0 :(得分:1)

也许您需要从5到1等级排序?

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

我不明白,为什么你需要分组。 您可以按评级对项目进行分组,但每个组都可以包含许多文件。那么,你打算怎么处理这些团体呢?只是按降序排列显示它们?所以,使用sort。

答案 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