2011-11-09 31 views
6

Tôi có một bộ sưu tập có tên là Albums với các đối tượng từ lớp Album. Lớp này có thuộc tính Songs, là tập hợp các đối tượng Song. Mỗi Song có một Id duy nhất.LINQ: Tìm phần tử trong bộ sưu tập

public IQueryable<Album> Albums 

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

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

Có thể sử dụng LINQ để tìm một bài hát trong bộ sưu tập Album không? Tôi không biết làm thế nào, tôi mới đến Ling. tôi đã cố gắng một chút:

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

Thanks a lot,

Vincent

Trả lời

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

SelectMany sẽ tạo một danh sách phẳng tất cả các bài hát cho tất cả các album cho phép bạn sau đó chọn đầu tiên với id thích hợp.

+0

Cảm ơn, Daz Lewis – Vinzcent

3

Bạn cần phải làm điều này nếu bạn có một album ...

var album = GetAlbum(); 
var song = album.Songs.FirstOrDefault(s => s.ID == id); 

Hoặc này nếu bạn không ...

var song = albumsCollection.SelectMany(s => s.Songs).FirstOrDefault(s => s.ID == id); 
0

Đề nghị của tôi để tìm một ablum với một bài hát nào đó:

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

Nếu bạn muốn quay trở lại album có chứa các bài hát với một Id nhất định, bạn nên sử dụng các truy vấn sau đây:

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

nếu bạn muốn nhận được bài hát:

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(); 
Các vấn đề liên quan