Linq: найти элемент в коллекции
у меня есть коллекция под названием Albums
с объектами из класса Album
. Этот класс имеет свойство Songs
, который представляет собой коллекцию Song
объекты. Каждый Song
имеет уникальный идентификатор.
public IQueryable<Album> Albums
public class Album
{
...
public virtual ICollection<Song> Songs { get; set; }
...
}
public class Song
{
public int Id { get; set; }
...
}
возможно ли, используя Linq, найти песню в коллекции альбомов? Я понятия не имею, как, я новичок в Линг. Я попробовал немного:
Albums.FirstOrDefault(a => a.Songs.Id == id);
Спасибо большое,
Винсент
5 ответов
Albums.SelectMany(a=>a.Songs).FirstOrDefault(song => song.Id == id)
SelectMany создаст сплющенный список всех песен для всех альбомов, позволяющий выбрать первый с соответствующим идентификатором.
Если вы хотите вернуть альбом, содержащий песню с заданным ID, вы должны использовать следующий запрос:
Albums.FirsOrDefault(a => a.Songs.Any(s => s.Id == Id));
Если вы хотите получить песне:
Albums.SelectMany(a=>a.Songs).FirstOrDefault(s => s.Id == Id);
вам нужно сделать это, если у вас есть альбом...
var album = GetAlbum();
var song = album.Songs.FirstOrDefault(s => s.ID == id);
или это, если вы не...
var song = albumsCollection.SelectMany(s => s.Songs).FirstOrDefault(s => s.ID == id);
мое предложение найти ablum с определенной песней:
Album albumFound = Albums.FirstOrDefault(item => item.Songs.FirstOrDefault(song => song.Id == id) != null);
var query = from album in Albums
from song in album.Songs
where song.Id == id;
var song = query.FirstOrDefault();