Linq:在集合中查找元素

时间:2011-11-09 09:38:11

标签: c# asp.net linq

我有一个名为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);

非常感谢,

文森特

5 个答案:

答案 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();