2011-04-21 38 views
0

我有兩個使用實體數據模型生成的對象。對象如下所示:使用強類型對象在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獲取相冊的歌曲對象。我有相冊ID。目前,我試圖:

int albumID = GetAlbumID(); 
var results = from lookup in context.AlbumSongLookups 
       where lookup.AlbumID=albumID 
       select lookup; 

我知道我需要做一個連接。但是我不確定的是,如何使用此LINQ查詢將結果作爲Song對象?

謝謝!

回答

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這裏的存在。

0

這是行不通的嗎?

from lookup in context.AlbumSongLookups 
from songs in context.Song 
where lookup.SongID == songs.ID && lookup.SongID == albumID 
select songs 
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); 
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;