List<int> Ids = dc.Albums.Where(a => a.Track.Singby.ArtistId == 1).Select(a=> a.albumId).Distinct().ToList();
List<Album> distinctAlbums = dc.Albums.Where(a => distinctAlbumIds.Contains(a.albumId)).ToList();
Эй, ТТКГ, выше самый простой способ сделать это.Это связано с тем, что выполнение Distinct над списком объектов не будет выполняться на основе идентификатора альбома.
Либо вы делаете это в два этапа, как описано выше, либо вы пишете свой собственный Album Comparer, который указывает уникальность на основеAlbumId и передайте его вызову Distinct в List.
ПРИМЕЧАНИЕ:
Вышеописанное будет работать только в том случае, если вы определили ограничения в вашем DBML, но лучше - в вашей БД.
Для передового опыта всегда определяйте свои отношения В БАЗЕ ДАННЫХ при использовании Linq к SQL, поскольку Linq к SQL не похож на EF или NHibernate, поскольку он не «абстрагирует» вашу базу данных, он просто отражает ее.Это инструмент для Data Driven Design, а не Domain Driven, поэтому определите отношения в БД.