2011-11-09 115 views
6

我有一個名爲Albums的集合,其類別爲Album。這個班級有一個Songs,這是一個Song對象的集合。每個Song都有一個唯一的ID。Linq:在集合中查找元素

public IQueryable<Album> Albums 

public class Album 
{ 
    ... 
    public virtual ICollection<Song> Songs { get; set; } 
    ... 
} 

public class Song 
{ 
    public int Id { get; set; } 
    ... 
} 

是否有可能,使用LINQ,找到專輯收集歌曲?我不知道如何,我是凌新。 我嘗試了一下:

Albums.FirstOrDefault(a => a.Songs.Id == id); 

非常感謝,

文森特

回答

12
Albums.SelectMany(a=>a.Songs).FirstOrDefault(song => song.Id == id) 

SelectMany將爲所有專輯創建所有歌曲的展開列表,然後您可以使用相應的ID選擇第一個。

+0

謝謝,達斯劉易斯 – Vinzcent

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); 
0

我的建議,找到某一首歌的ablum:

Album albumFound = Albums.FirstOrDefault(item => item.Songs.FirstOrDefault(song => song.Id == id) != null); 
3

如果你想返回一個包含給定ID歌曲的專輯,你應該使用下面的查詢:

Albums.FirsOrDefault(a => a.Songs.Any(s => s.Id == Id)); 

,如果你想獲得歌曲:

Albums.SelectMany(a=>a.Songs).FirstOrDefault(s => s.Id == Id); 
0
var query = from album in Albums 
      from song in album.Songs 
      where song.Id == id; 

var song = query.FirstOrDefault(); 
相關問題