【问题标题】:sql query to fill dataset with multiple datatables based on specific columnsql查询根据特定列用多个数据表填充数据集
【发布时间】:2012-01-03 23:39:30
【问题描述】:

我有一个名为 tSongList 的 SQL Server 表,其中包含以下信息:

colAlbumID, colSongName, colAlbumTrackNumber, colRequestedCount, colPlayPriority

此表的目的是帮助 DJ 保留一份 DJ 应该播放哪些歌曲以及它们来自哪个专辑的列表。我有一个 C# 类,它将从特定的albumID 中获取歌曲列表,并根据colRequestedCount 计算colPlayPriority。我设计了这个类来获取包含上述列的DataTable 并计算必要的信息。

所以我的问题是,如果我想使用 SQL 从tSongList 中选择所有行,我如何将 SQL 结果放入由colAlbumID 分组的多个DataTables 中?换句话说,我想要一个包含其歌曲信息的每张专辑的DataTable

我知道我可以使用SqlDataAdapter 来填充DataSet,并且由于DataSet 可以包含多个DataTables,有没有办法构造一个SQL 查询来返回一个包含@ 的DataSet 987654336@按albumID分组?

另外,如果无法做到这一点,我是否应该将所有内容都选择到一个 DataTable 中,然后使用 Select 函数来获取 DataRow 数组?

【问题讨论】:

  • 首先我会标准化你的数据。您需要一个歌曲表、一个专辑表和一个播放列表表。

标签: c# sql-server dataset


【解决方案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") };

【讨论】:

    【解决方案2】:

    我认为MSDN 上的示例将向您展示如何执行此操作。如果您首先正确地normalise 您的数据,您将使自己的生活更轻松。您可以创建具有必要关系的分层数据集,从而可以轻松获取专辑的所有歌曲。

    【讨论】:

      猜你喜欢
      • 2015-07-08
      • 2013-07-30
      • 2012-06-06
      • 2012-07-05
      • 2013-10-27
      • 1970-01-01
      • 1970-01-01
      • 2013-05-11
      • 1970-01-01
      相关资源
      最近更新 更多