#c# #asp.net #linq
#c# #asp.net #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 найти песню в коллекции альбомов?Я понятия не имею, как, я новичок в Ling.
Я немного попробовал:
Albums.FirstOrDefault(a => a.Songs.Id == id);
Большое спасибо,
Винсент
Ответ №1:
Albums.SelectMany(a=>a.Songs).FirstOrDefault(song => song.Id == id)
SelectMany создаст сводный список всех песен для всех альбомов, что позволит вам затем выбрать первую с соответствующим идентификатором.
Ответ №2:
Это необходимо сделать, если у вас есть альбом…
var album = GetAlbum();
var song = album.Songs.FirstOrDefault(s => s.ID == id);
Или это, если вы этого не сделаете…
var song = albumsCollection.SelectMany(s => s.Songs).FirstOrDefault(s => s.ID == id);
Ответ №3:
Если вы хотите вернуть альбом, содержащий песню с заданным идентификатором, вам следует использовать следующий запрос:
Albums.FirsOrDefault(a => a.Songs.Any(s => s.Id == Id));
если вы хотите получить песню:
Albums.SelectMany(a=>a.Songs).FirstOrDefault(s => s.Id == Id);
Ответ №4:
Мое предложение найти аблум с определенной песней:
Album albumFound = Albums.FirstOrDefault(item => item.Songs.FirstOrDefault(song => song.Id == id) != null);
Ответ №5:
var query = from album in Albums
from song in album.Songs
where song.Id == id;
var song = query.FirstOrDefault();