2011-11-28 84 views
2

我正在使用Linq-to-SQL,並且我剛開始學習一些基礎知識。我在選擇命令很多表中的許多列時遇到問題。我給出選入會話的歌曲(包含歌曲),並在數據網格中顯示歌曲名,藝術家名,genrename。Linq-to-SQL選擇很多列

但它不工作。

ArrayList SelectedSongs = (ArrayList)Session["SelectedSongs"]; 

string songIds = ""; 

foreach (int id in SelectedSongs) 
      songIds += id + ", "; 

var query = from s in sa.Songs 
      from ar in sa.Artists 
      from g in sa.Genres 
      where s.SongID in (songIds) 
      select new { s.SongID, s.SongName, ar.ArtistName, g.GenreName }; 

dgSongs.DataSource = query; 

任何人都可以幫我解決這個問題。 謝謝。

+0

你什麼錯誤? –

+0

錯誤消息:無效的表達式'in' – Mimosa

+0

看起來您缺少一些JOIN。我發現一個很好的資源是[http://msdn.microsoft.com/en-us/vstudio/bb688085](http://msdn.microsoft.com/en-us/vstudio/bb688085)在那裏你會發現JOIN – ToddBFisher

回答

0

似乎你想加入多個表。我建議看看加入部分of this page。祝你好運!

0

我相信你想要歌曲是int []而不是csv的id。

2

這個語法是不正確的Linq:

where s.SongID in (songIds) 

LINQ的等效SQL的WHERE IN的是使用Contains()。你必須把周圍的發言,並開始與列表:

where songIds.Contains(s.SongID) 

當使用LINQ到SQL你應該總是使用導航屬性而不是明確連接。如果你的表格之間有適當的外鍵,那麼這些屬性將自動創建。隨着導航性能和songIDs變成一個int[]您的查詢應該是這樣的:

int[] songIDs = ((ArrayList)Session["SelectedSongs"]).OfType<int>().ToArray(); 

var query = from s in sa.Songs 
      where songIDs.Contains(s.SongID) 
      select new 
      { 
       s.SongID, 
       s.SongName, 
       s.Artist.ArtistName, 
       s.Genre.GenreName 
      }; 
+0

不能將類型'System.Collections.Genric.List '隱式轉換爲int [] – Mimosa

+0

對不起,我的不好。我會解決它。 –

+0

沒問題,謝謝你的幫助! – Mimosa