2011-11-22 91 views
3

我有一個SQL Server表稱爲tSongList,包含以下信息與多個數據表填寫數據集DJ應播放哪些歌曲以及他們來自哪個專輯。我有一個C#類,它將從特定的albumID中獲取歌曲列表,並根據colRequestedCount計算出colPlayPriority。我設計了這個課程,其中包含上面的列,並計算出必要的信息DataTableSQL查詢,基於特定的列

所以我的問題是,如果我想使用SQL來選擇所有從tSongList行,我該如何獲得SQL結果到多個DataTables通過colAlbumID分組?換句話說,我想要一個DataTable包含它的歌曲信息的每個專輯。

我知道,我可以用一個SqlDataAdapter填充DataSet和因爲DataSet可以包含多個DataTables,有沒有辦法來構造一個SQL查詢返回包含該DataTables通過albumID分組一DataSet

此外,如果這個不能做,我應該只是選擇一切到一個DataTable和使用Select功能得到DataRow陣列呢?

+3

首先我會規範化你的數據。您需要歌曲表,專輯表和播放列表表。 – Maess

回答

0

我認爲MSDN上的例子會告訴你如何做到這一點。如果您的數據第一次正確normalise,那麼您會讓自己更加輕鬆自在。您可以創建具有必要關係的分層數據集,從而使得獲取專輯的所有歌曲變得微不足道。

1

一種選擇是返回一個DataTable並使用LINQ創建分組。

var albumGroups = from a in dtAlbums.AsEnumerable() 
    group a by a.Field<int>("albumID") into g 
    select new { colSongName = g.Field<string>("colSongName"), 
       colAlbumTrackNumber = g.Field<int>("colAlbumTrackNumber"), 
       colRequestedCount = g.Field<int>("colRequestedCount"), 
       colPlayPriority = g.Field<int>("colPlayPriority") };