private dynamic GetAvailableDatabase(dynamic arg)
        {
            int databaseId = arg.databaseId;
            var userGroups = this.Context.CurrentUser.Claims.ToArray(); // groupsForUserService.Get(this.Context.CurrentUser.UserName);
            var targetDatabases  = dbContext.ActiveDirectoryRestorePolicies
                     .Where(p => p.SourceDatabaseId == databaseId && p.Groups.Any(g => userGroups.Contains(g.Name)))
                     .SelectMany(p => p.DestinationDatabaseServer.Databases.Where(d =>d.Name.StartsWith(p.DestinationDatabaseExpression)))
                     .Select(d => new { SourceDatabaseServerName = d.Server.Name, SourceDatabaseId = d.Id, SourceDatabaseName = d.Name })
                     .OrderBy(d => d.SourceDatabaseServerName)
                     .ThenBy(d => d.SourceDatabaseName)
                     .ToList();


            var list = new List<SourceServerViewModel>();
            SourceServerViewModel previousServer = null;

            foreach (var item in targetDatabases)
            {
                if (previousServer == null || previousServer.Name != item.SourceDatabaseServerName)
                {
                    previousServer = new SourceServerViewModel();
                    previousServer.Name = item.SourceDatabaseServerName;
                    list.Add(previousServer);
                }

                var sourceDatabase = new SourceDatabaseViewModel();

                sourceDatabase.Name = item.SourceDatabaseName;
                sourceDatabase.Id = item.SourceDatabaseId;
                previousServer.Databases.Add(sourceDatabase);
            }

            return list;
        }
        private dynamic Index(dynamic parameters)
        {
            var userGroups = this.Context.CurrentUser.Claims.ToArray(); // groupsForUserService.Get(this.Context.CurrentUser.UserName);


            var sourceDatabases = dbContext.ActiveDirectoryRestorePolicies
                     .Where(p => p.Groups.Any(g => userGroups.Contains(g.Name)))
                     .Select(p => new { SourceDatabaseServerName = p.SourceDatabase.Server.Name, SourceDatabaseId = p.SourceDatabase.Id, SourceDatabaseName = p.SourceDatabase.Name })
                     .OrderBy(d => d.SourceDatabaseServerName)
                     .ThenBy(d => d.SourceDatabaseName)
                     .ToList();


            var list = new List<SourceServerViewModel>();
            SourceServerViewModel previousServer = null;

            foreach (var item in sourceDatabases)
            {
                if (previousServer == null || previousServer.Name != item.SourceDatabaseServerName)
                {
                    previousServer = new SourceServerViewModel();
                    previousServer.Name = item.SourceDatabaseServerName;
                    list.Add(previousServer);
                }

                var sourceDatabase = new SourceDatabaseViewModel();

                sourceDatabase.Name = item.SourceDatabaseName;
                sourceDatabase.Id = item.SourceDatabaseId;
                previousServer.Databases.Add(sourceDatabase);
            }

            //Task.WaitAll(foundFilesTask, targetInstancesTask);
            //IList<DatabaseServer> foundFiles = foundFilesTask.Result;
            //IList<DatabaseServer> targetInstances = targetInstancesTask.Result;

            //dynamic model = new
            //    {
            //        FoundFiles = foundFiles,
            //        TargertInstances = targetInstances
            //    };

            return View["index", list];
        }