我想知道是否可以从Linq表达式中获取List<IGrouping<string, IGrouping<string, T>>>
。我想要做的是按流派和艺术家订购歌曲,但是我可以按照每种类型和每种类型进行迭代的格式,对每张专辑进行迭代。如果可能的话怎么办?或者有更好的方法来实现我想要实现的目标吗?
这是我的歌曲课程
public class Song
{
[StringLength(100)]
public string Album { get; set; }
public int Id { get; set; }
[StringLength(100)]
public string Title { get; set; }
[StringLength(100)]
public string Genre { get; set; }
[StringLength(255)]
public string Comment { get; set; }
[StringLength(4)]
public string Year { get; set; }
[StringLength(100)]
public string Author { get; set; }
public int Length { get; set; }
[StringLength(255)]
public string Photo { get; set; }
[StringLength(255)]
public string FileName { get; set; }
public string Extension { get; set; }
}
我在这里的查询
var songs = db.Songs.GroupBy(s => s.Genre).ToList();
给了我一个List<IGrouping<string, Song>>
,但我想要的是进一步按艺术家分组。
答案 0 :(得分:5)
我想要的是List<IGrouping<string, IGrouping<string, Song>>>
,这段代码完全符合我的要求
var queryNestedGroups =
(from song in db.Songs
group song by song.Genre into newGroup1
from newGroup2 in
(from song in newGroup1
group song by song.Author)
group newGroup2 by newGroup1.Key).ToList();
(虽然我不太确定如何将其翻译成linq方法语法)。
感谢所有评论和/或回答的人。
答案 1 :(得分:2)
var songs = db.Songs.GroupBy(s => s.Genre, (genre, genreGroup) => new
{
Genre = genre,
ArtistGroup = genreGroup.GroupBy(s => s.Artist)
});
这几乎会返回您想要的内容,但是IGrouping<string, IGrouping<string, Song>>
只有在您使用自己的类实现IGrouping<K,V>
且new
而不是上面使用的匿名类型时才能返回 product quantity
x 4
y 5
z 3
。
答案 2 :(得分:0)
尝试在第一个
的结果中添加第二个分组var songs = db.Songs.GroupBy(s => s.Artist).SelectMany(s => s.GroupBy (d => d.Genre)).OrderBy (s => s.Key).ToList();