C# Linq:在集合中查找元素
我有一个名为C# Linq:在集合中查找元素,c#,asp.net,linq,C#,Asp.net,Linq,我有一个名为Albums的集合,其中包含类Album中的对象。此类有一个属性歌曲,它是歌曲对象的集合。每首歌曲都有一个唯一的Id public IQueryable<Album> Albums public class Album { ... public virtual ICollection<Song> Songs { get; set; } ... } public class Song { public int Id { get
Albums
的集合,其中包含类Album
中的对象。此类有一个属性歌曲
,它是歌曲
对象的集合。每首歌曲都有一个唯一的Id
public IQueryable<Album> Albums
public class Album
{
...
public virtual ICollection<Song> Songs { get; set; }
...
}
public class Song
{
public int Id { get; set; }
...
}
非常感谢
文森特如果你有一张专辑,你需要这样做
var album = GetAlbum();
var song = album.Songs.FirstOrDefault(s => s.ID == id);
或者这个如果你不
var song = albumsCollection.SelectMany(s => s.Songs).FirstOrDefault(s => s.ID == id);
SelectMany将为所有专辑创建一个平展的所有歌曲列表,允许您选择具有适当id的第一首歌曲。我的建议是查找包含特定歌曲的唱片:
Album albumFound = Albums.FirstOrDefault(item => item.Songs.FirstOrDefault(song => song.Id == id) != null);
如果要返回包含具有给定Id的歌曲的唱片集,应使用以下查询:
Albums.FirsOrDefault(a => a.Songs.Any(s => s.Id == Id));
如果你想得到这首歌:
Albums.SelectMany(a=>a.Songs).FirstOrDefault(s => s.Id == Id);
Albums.FirsOrDefault(a => a.Songs.Any(s => s.Id == Id));
Albums.SelectMany(a=>a.Songs).FirstOrDefault(s => s.Id == Id);
var query = from album in Albums
from song in album.Songs
where song.Id == id;
var song = query.FirstOrDefault();