2011-11-22 3 views
3

에 따라 여러 datatables로 데이터 집합을 채우기 위해 DJ가 연주해야하는 노래와 그들이 출연 한 앨범. 특정 albumID에서 노래 목록을 가져오고 colRequestedCount을 기반으로 colPlayPriority을 계산하는 C# 클래스가 있습니다. 위의 열을 포함하는 DataTable을 가져와 필요한 정보를 계산하도록이 클래스를 설계했습니다.SQL 쿼리 내가 SQL Server 테이블에는 다음 정보가 포함됩니다 <code>tSongList</code>라는이 특정 열

그래서 SQL을 사용하여 tSongList의 모든 행을 선택하려면 SQL 결과를 DataTables (colAlbumID)으로 그룹화하려면 어떻게해야합니까? 즉, 노래 정보가 들어있는 각 앨범에 대해 DataTable을 원합니다.

나는 내가 DataSet 여러 DataTables를 포함 할 수 있기 때문에 SqlDataAdapterDataSet를 작성하는 데 사용할 수 있다는 것을 알고는 DataTablesalbumID별로 그룹화 포함하는 DataSet을 반환하는 SQL 쿼리를 구성하는 방법은 무엇입니까?

만약이 작업을 수행 할 수 없으면 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") };