【问题标题】:Linq: Find Element in a CollectionLinq:在集合中查找元素
【发布时间】:2011-11-09 09:38:10
【问题描述】:

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

非常感谢,

文森特

【问题讨论】:

    标签: c# asp.net linq


    【解决方案1】:
    Albums.SelectMany(a=>a.Songs).FirstOrDefault(song => song.Id == id)
    

    SelectMany 将为所有专辑创建一个所有歌曲的扁平列表,然后您可以选择具有适当 id 的第一首歌曲。

    【讨论】:

      【解决方案2】:

      如果要返回包含具有给定 ID 的歌曲的专辑,则应使用以下查询:

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

      如果你想得到这首歌:

      Albums.SelectMany(a=>a.Songs).FirstOrDefault(s => s.Id == Id); 
      

      【讨论】:

        【解决方案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);
        

        【讨论】:

          【解决方案4】:

          我的建议是为某首歌曲找到一个专辑:

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

          【讨论】:

            【解决方案5】:
            var query = from album in Albums
                        from song in album.Songs
                        where song.Id == id;
            
            var song = query.FirstOrDefault();
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2023-04-02
              • 1970-01-01
              • 2021-10-22
              • 2012-05-20
              • 2020-04-12
              • 1970-01-01
              • 2014-07-08
              相关资源
              最近更新 更多