排序GroupBy嵌套列表Lambda

时间:2015-04-22 01:46:04

标签: c#-4.0

我有8年以上听众选择音乐的数据,我的任务是在一年内找到最受聆听的艺术家。必须将艺术家姓名返回给字符串。我被要求使用一个lambda语句来做这件事,我迷路了。

这是我到目前为止所拥有的。 (其中时间是原始收听的系统日期时间)

string mostPopular = musicDataList.Where(x => x.Time.Year.ToString() == year).GroupBy(y => y.Artist).OrderByDescending;

我把分号放在那里,因为我不知道接下来会发生什么。

我知道: 我需要先按年限制搜索, 我按照艺术家对结果进行分组,以便我可以按列表中的对象数量来排序结果,

我不知道的事: 用于在GroupBy之后对嵌套列表进行排序的语法,其中包含多少个对象, 如何订单列表的每个元素中的对象数量, 然后从对象中提取艺术家字符串属性。

是的,这是一个类,这就是为什么它必须与单个lambda语句如此具体,我只是不理解操纵嵌套列表到我自己可以得到正确语法的地方。

如果有人对如何达成解决方案有任何解读,我将不胜感激,我似乎无法找到正确的信息。

string mostPopular = musicDataList.Where(x => x.Time.Year.ToString() == year).GroupBy(y => y.Artist).OrderByDescending(z => z.Count()).First().Select(b => b.Artist).ToString();

这是我的想法。将此列表缩减至仅审核年份。按艺术家对对象进行分组,按嵌套列表的.count对组列表进行排序,获取第一个元素,选择艺术家属性,然后按到字符串。

然而,这不起作用。我不确定这里出了什么问题,我在线阅读的内容并没有帮助我弄清楚如何根据内部列表中的MANY对象来排列对象的内部列表。

1 个答案:

答案 0 :(得分:0)

string difficult = musicDataList.Where(x => x.Time.Year.ToString() == year).GroupBy(y => y.Artist).OrderByDescending(z => z.Count()).First().First().Artist;

这结束了工作。选择第一个(.First()。First())元素的第一个元素在按.count排序后工作。

有没有人知道是否有更有效的措辞方法呢?

对嵌套列表的任何好读,以及如何访问嵌套在列表中的特定对象的属性都会很棒。