在LINQ中对强类型对象执行JOIN

| 我有两个通过实体数据模型生成的对象。这些对象如下所示:
public class Song
{
  public int ID { get; set; }
  public string Title { get; set; }
  public double Duration { get; set; }
}

public class AlbumSongLookup
{
  public int ID { get; set; }
  public int SongID { get; set; }
  public int AlbumID { get; set; }
}
我需要使用LINQ获取专辑的Song对象。我有专辑ID。目前,我正在尝试:
int albumID = GetAlbumID();
var results = from lookup in context.AlbumSongLookups
              where lookup.AlbumID=albumID
              select lookup;
我了解我需要加入。但是我不确定的是,如何通过此LINQ查询将结果变为Song对象? 谢谢!     
已邀请:
此查询是否返回您的期望?
var results = from lookup in context.AlbumSongLookups
              join song in context.Songs on lookup.SongID equals song.ID
              where lookup.AlbumID == albumID
              select song;
我假设上下文的存在。     
这行不通吗?
from lookup in context.AlbumSongLookups
from songs in context.Song
where lookup.SongID == songs.ID && lookup.SongID == albumID
select songs
    
您可以在“歌曲”实体中添加一个“导航属性”,这样,您就可以直接访问特定专辑的相应歌曲。实体框架将为您完成繁重的工作。 对于您的情况,它返回一个查询集合,您需要做的是查找与之对应的Song对象。可以使用:
int albumID = GetAlbumID();
var results = from lookup in context.AlbumSongLookups
              where lookup.AlbumID=albumID
              select context.Songs.SingleOrDefault(s=>s.SongID==lookup.SongID);
    
这样的事情应该起作用:
int albumID = GetAlbumID();
var songIDs = from lookup in contenxt.AlbumSongLookups
              where lookup.AlbumID == albumID
              select lookup.SongID;
var results = from song in context.Songs
              where song.SongID in SongIDs
              select song;
    

要回复问题请先登录注册