Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Linq:在集合中查找元素_C#_Asp.net_Linq - Fatal编程技术网

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