public SpotifyPlaylistChangeManager(SpotifyPlaylistChange[] oChanges)
 {
     this._Changes = oChanges;
     this._PlaylistNames = (from Change in this._Changes select Change.PlaylistName).Distinct().ToArray();
     this._TrackNames = (from Change in this._Changes select Change.TrackName).Distinct().ToArray();
     this._AddCount = (from Change in this._Changes where Change.ChangeType == 'A' select Change).ToArray().Length;
     this._MoveCount = (from Change in this._Changes where Change.ChangeType == 'M' select Change).ToArray().Length;
     this._DeleteCount = (from Change in this._Changes where Change.ChangeType == 'D' select Change).ToArray().Length;
 }
        public static SpotifyPlaylistChange[] GetPlaylistChanges(long iUserID, DateTime dtStart, DateTime dtEnd)
        {
            List<SpotifyPlaylistChange> PlaylistChanges = new List<SpotifyPlaylistChange>();
            DataSet ds = RelationalDatabase.ExecuteStoredProcedure("GetPlaylistChangesForUser"
                                                                   , new SqlParameter("iUserID", iUserID)
                                                                   , new SqlParameter("dtStart", dtStart)
                                                                   , new SqlParameter("dtEnd", dtEnd)
                                                                );
            List<SpotifyArtist> Artists = new List<SpotifyArtist>();
            List<SpotifyTrackChange> TrackChanges = new List<SpotifyTrackChange>();
            DataRow drLastRow = ds.Tables[0].NewRow();
            bool bFirstTrack = true;

            string CurrentPlaylistGuid;
            //string NextPlaylistGuid;
            long CurrentPlaylistID;
            //long NextPlaylistID;
            string CurrentPlaylistName;
            //string CurrentPlaylistOwner;
            //string NextPlaylistName;
            for (int j = 0; j < ds.Tables[0].Rows.Count; j++)
            {
                
                DataRow drCurrentRow = ds.Tables[0].Rows[j];
                if (!bFirstTrack)
                {
                    if (drLastRow["TrackGuid"].ToString().Equals(drCurrentRow["TrackGuid"].ToString()) && drLastRow["PlaylistGuid"].ToString().Equals(drCurrentRow["PlaylistGuid"].ToString()))
                        {
                            long iLastArtistID = Convert.ToInt64(drLastRow["ArtistID"].ToString());
                            string sLastArtistName = drLastRow["ArtistName"].ToString();
                            string sLastArtistGuid = drLastRow["ArtistGuid"].ToString();
                            Artists.Add(new SpotifyArtist(iLastArtistID, sLastArtistGuid, sLastArtistName));
                        }
                        else
                        {

                            long iLastArtistID = Convert.ToInt64(drLastRow["ArtistID"].ToString());
                            string sLastArtistName = drLastRow["ArtistName"].ToString();
                            string sLastArtistGuid = drLastRow["ArtistGuid"].ToString();
                            Artists.Add(new SpotifyArtist(iLastArtistID, sLastArtistGuid, sLastArtistName));
                            string sChangeType = drLastRow["ChangeCode"].ToString();
                            SpotifyChangeType eSpotifyChangeType;
                            switch (sChangeType)
                            {
                                case "A":
                                    eSpotifyChangeType = SpotifyChangeType.Add;
                                    break;
                                case "D":
                                    eSpotifyChangeType = SpotifyChangeType.Delete;
                                    break;
                                default:
                                    eSpotifyChangeType = SpotifyChangeType.Move;
                                    break;
                            }

                            TrackChanges.Add(
                                                   new SpotifyTrackChange(
                                                                            Convert.ToInt64(drLastRow["TrackID"].ToString())
                                                                            , drLastRow["TrackGuid"].ToString()
                                                                            , drLastRow["TrackName"].ToString()
                                                                            , Artists.ToArray()
                                                                            , eSpotifyChangeType
                                                                            , Convert.ToDateTime(drLastRow["ChangedDate"].ToString())
                                                                            )
                                               );

                            Artists = new List<SpotifyArtist>();
                            long iCurrentArtistID = Convert.ToInt64(drCurrentRow["ArtistID"].ToString());
                            string sCurrentArtistName = drCurrentRow["ArtistName"].ToString();
                            string sCurrentArtistGuid = drCurrentRow["ArtistGuid"].ToString();
                            Artists.Add(new SpotifyArtist(iCurrentArtistID, sCurrentArtistGuid, sCurrentArtistName));
                        }



                    if (!drLastRow["PlaylistGuid"].ToString().Equals(drCurrentRow["PlaylistGuid"].ToString()))
                    {
                        CurrentPlaylistGuid = drLastRow["PlaylistGuid"].ToString();
                        CurrentPlaylistID = Convert.ToInt64(drLastRow["PlaylistID"].ToString());
                        CurrentPlaylistName = drLastRow["PlaylistName"].ToString();
                        //CurrentPlaylistOwner = drLastRow["PlaylistOwner"].ToString();
                        SpotifyPlaylistChange oSpotifyPlaylistChange = new SpotifyPlaylistChange(CurrentPlaylistID, CurrentPlaylistGuid, CurrentPlaylistName, "", TrackChanges.ToArray());
                        PlaylistChanges.Add(oSpotifyPlaylistChange);
                        TrackChanges = new List<SpotifyTrackChange>();
                    }
                    
                       
                    
                    
                    
                    
                }
                else
                {
                    bFirstTrack = false;
                }
                

                drLastRow = drCurrentRow;
            }







            return PlaylistChanges.ToArray();
        }