private async Task <GridOutcome> GetDataQueryAsync(string GridConfigId, GridDataRequest gridDataRequest)
        {
            StringBuilder queryBuilder = new StringBuilder();
            Task <SqlSourceConfiguration> sourceConfigTask      = GetSourceConfig(GridConfigId);
            Task <GridConfigurationEO>    gridConfigurationTask = GetGridConfiguration(GridConfigId);
            await Task.WhenAll(sourceConfigTask, gridConfigurationTask);

            SqlSourceConfiguration sourceConfig      = sourceConfigTask.Result;
            GridConfigurationEO    gridConfiguration = gridConfigurationTask.Result;

            gridConfiguration.Controls = DynamicFormRepository.GetFormControls(gridConfiguration.SearchConfigId).AsList();

            Query query      = null;
            Query countQuery = null;

            if (sourceConfig == null)
            {
                query = db.Query(gridConfiguration.TableName);
            }
            else
            {
                query = db.Query().FromRaw(sourceConfig.SqlQuery);
                if (sourceConfig.Condition.IsNotNullOrEmpty())
                {
                    query = query.Where(sourceConfig.Condition);
                }
            }
            if (gridConfiguration.Controls.IsNotNullOrEmpty() && gridDataRequest.Parameters.IsNotNullOrEmpty())
            {
                IEnumerable <FormFieldConfiguration> controls = gridConfiguration.Controls.Where(control => gridDataRequest.Parameters.ContainsKey(control.Name));
                foreach (FormFieldConfiguration control in controls)
                {
                    HandleSearchOperators(gridDataRequest, control, query);
                }
            }
            countQuery = db.FromQuery(query).AsCount();
            if (gridDataRequest.OrderBy.IsNotNullOrEmpty())
            {
                query = query.OrderBy(gridDataRequest.OrderBy);
            }
            if (gridDataRequest.PageNo > 0 && gridDataRequest.PageSize > 0)
            {
                query = query.Skip((gridDataRequest.PageNo - 1) * gridDataRequest.PageSize).Take(gridDataRequest.PageSize);
            }
            Task <IEnumerable <dynamic> > resultSet = query.GetAsync <dynamic>();
            int cnt = db.ExecuteScalar <int>(countQuery);

            Task.WaitAll(resultSet);
            Task <GridOutcome> gridOutcome = new Task <GridOutcome>(() => {
                return(new GridOutcome
                {
                    ResultSet = resultSet.Result.ToList(),
                    PageNo = gridDataRequest.PageNo,
                    TotalRecords = cnt
                });
            });

            gridOutcome.RunSynchronously();
            return(await gridOutcome);
        }
        public GridConfiguration GetGridConfig(string GridConfigId)
        {
            GridConfiguration gridConfiguration = null;

            using (Connection)
            {
                gridConfiguration = Connection.Query <GridConfiguration, SourceConfiguration, GridConfiguration>(
                    DynamicGridQueryProvider.GridConfiguration,
                    (gridConfig, sourceConfig) =>
                {
                    gridConfig.Source = sourceConfig;
                    return(gridConfig);
                },
                    new { GridConfigId = GridConfigId }
                    , splitOn: "Url").FirstOrDefault();
                if (gridConfiguration != null)
                {
                    if (gridConfiguration.SearchConfigId.IsNotNullOrEmpty())
                    {
                        gridConfiguration.SearchConfig          = DynamicFormRepository.GetFormConfig(gridConfiguration.SearchConfigId);
                        gridConfiguration.SearchConfig.Controls = DynamicFormRepository.GetFormControls(gridConfiguration.SearchConfigId);
                    }
                    gridConfiguration.Columns = GetGridColumns(GridConfigId);
                }
            }
            return(gridConfiguration);
        }