我有两个使用实体数据模型生成的对象。对象如下所示:
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对象?
谢谢!
答案 0 :(得分:1)
此查询是否会返回您期望的内容?
var results = from lookup in context.AlbumSongLookups
join song in context.Songs on lookup.SongID equals song.ID
where lookup.AlbumID == albumID
select song;
我假设这里存在 context.Songs 。
答案 1 :(得分:0)
这不起作用吗?
from lookup in context.AlbumSongLookups
from songs in context.Song
where lookup.SongID == songs.ID && lookup.SongID == albumID
select songs
答案 2 :(得分:0)
您可以为“歌曲”实体添加“导航属性”,这样,您就可以直接访问特定专辑的相应歌曲。实体框架将为您做繁重的工作。
在您的情况下,它返回一组查找,您需要做的是查找与它们对应的Song对象。这可以使用:
完成int albumID = GetAlbumID();
var results = from lookup in context.AlbumSongLookups
where lookup.AlbumID=albumID
select context.Songs.SingleOrDefault(s=>s.SongID==lookup.SongID);
答案 3 :(得分:0)
这样的事情应该有效:
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;