我有一个名为Albums
的集合,其中包含来自类Album
的对象。此类具有属性Songs
,它是Song
个对象的集合。每个Song
都有唯一的ID。
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);
非常感谢,
文森特
答案 0 :(得分:15)
Albums.SelectMany(a=>a.Songs).FirstOrDefault(song => song.Id == id)
SelectMany将为所有专辑创建所有歌曲的拼合列表,然后您可以选择具有相应ID的第一首歌曲。
答案 1 :(得分:3)
如果你有一张专辑,你需要这样做......
var album = GetAlbum();
var song = album.Songs.FirstOrDefault(s => s.ID == id);
或者如果你不这样做......
var song = albumsCollection.SelectMany(s => s.Songs).FirstOrDefault(s => s.ID == id);
答案 2 :(得分:3)
如果您想要返回包含具有给定ID的歌曲的相册,您应该使用以下查询:
Albums.FirsOrDefault(a => a.Songs.Any(s => s.Id == Id));
如果你想获得这首歌:
Albums.SelectMany(a=>a.Songs).FirstOrDefault(s => s.Id == Id);
答案 3 :(得分:0)
我建议找一首有某首歌的专辑:
Album albumFound = Albums.FirstOrDefault(item => item.Songs.FirstOrDefault(song => song.Id == id) != null);
答案 4 :(得分:0)
var query = from album in Albums
from song in album.Songs
where song.Id == id;
var song = query.FirstOrDefault();