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

时间:2011-04-21 15:33:53

标签: c# linq

我有两个使用实体数据模型生成的对象。对象如下所示:

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对象?

谢谢!

4 个答案:

答案 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;