我正在尝试制作一个LINQ查询,该查询可以找到同年发布超过1张专辑的艺术家。我的疑问是:
from ar in artists
join al in albums on ar.ArtistID equals al.ArtistID into allAlbumsByArtist
let albumsByYear = allAlbumsByArtist.GroupBy(a => a.YearPublished)
where albumsByYear.Count() > 1
select ar;
但出于某种原因,这个查询给了我艺术家的总相册数。我试着一步一步地解剖它:
var artistsAndAlbums =
from ar in artists
join al in albums on ar.ArtistID equals al.ArtistID into allAlbumsByArtist
select new { Artist = ar, AllAlbums = allAlbumsByArtist };
然后
foreach (var item in artistsAndAlbums)
{
Console.WriteLine(item.Artist.Name);
var albumsByYear = item.AllAlbums.GroupBy(a => a.YearPublished);
foreach (var al in albumsByYear)
Console.WriteLine(al.Count() > 1);
}
并且效果很好,但是,第一个类似SQL的查询为我提供了大多数专辑的艺术家,而不是同年发行的专辑超过1张的专辑。一直想弄清楚什么是错的,但找不到问题。
答案 0 :(得分:1)
但出于某种原因,这个查询给了我艺术家的总相册数。
这是因为条件
where albumsByYear.Count() > 1
albumsByYear
是集合的分组,因此您的标准基本上是要包含拥有相册超过一年的艺术家。
你真正需要的是这样的:
where albumsByYear.Any(grouping => grouping.Count() > 1)