Linq:在集合中查找元素

Vin*_*ent 8 c# linq asp.net

我有一个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; }
    ...
}
Run Code Online (Sandbox Code Playgroud)

是否有可能使用Linq在专辑集中找到一首歌?我不知道怎么样,我是玲的新手.我试了一下:

Albums.FirstOrDefault(a => a.Songs.Id == id);
Run Code Online (Sandbox Code Playgroud)

非常感谢,

文森特

Dar*_*wis 15

Albums.SelectMany(a=>a.Songs).FirstOrDefault(song => song.Id == id)
Run Code Online (Sandbox Code Playgroud)

SelectMany将为所有专辑创建所有歌曲的拼合列表,然后您可以选择具有相应ID的第一首歌曲.


sim*_*lds 6

如果您有专辑,则需要执行此操作...

var album = GetAlbum();
var song = album.Songs.FirstOrDefault(s => s.ID == id);
Run Code Online (Sandbox Code Playgroud)

或者这个,如果你不...

var song = albumsCollection.SelectMany(s => s.Songs).FirstOrDefault(s => s.ID == id);
Run Code Online (Sandbox Code Playgroud)


Fal*_*nwe 5

如果您想返回包含给定 ID 的歌曲的专辑,您应该使用以下查询:

Albums.FirstOrDefault(a => a.Songs.Any(s => s.Id == Id));
Run Code Online (Sandbox Code Playgroud)

如果你想获取这首歌:

Albums.SelectMany(a=>a.Songs).FirstOrDefault(s => s.Id == Id); 
Run Code Online (Sandbox Code Playgroud)