2011-11-22 129 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") };