Exemplo n.º 1
0
        /// <summary>
        /// Get predicate "x => x.Address.RegionId operation value"
        /// </summary>
        /// <param name="fieldValue"></param>
        /// <param name="operation"></param>
        /// <returns></returns>
        private Expression <Func <StatisticalUnit, bool> > GetRegionPredicate(object fieldValue, OperationEnum operation)
        {
            var regionIds = fieldValue;

            if (operation == OperationEnum.Equal || operation == OperationEnum.NotEqual)
            {
                var provider = Configuration
                               .GetSection(nameof(ConnectionSettings))
                               .Get <ConnectionSettings>()
                               .ParseProvider();
                IDbDataProvider dataProvider;

                switch (provider)
                {
                case ConnectionProvider.SqlServer:
                    dataProvider = new MsSqlDbDataProvider();
                    break;

                case ConnectionProvider.PostgreSql:
                    dataProvider = new PostgreSqlDbDataProvider();
                    break;

                case ConnectionProvider.MySql:
                    dataProvider = new MySqlDataProvider();
                    break;

                default: throw new Exception(Resources.Languages.Resource.ProviderIsNotSet);
                }

                regionIds = string.Join(",", dataProvider.GetRegionChildren(DbContext, fieldValue));
            }

            return(GetMultipleRegionsPredicate(regionIds, operation));
        }
Exemplo n.º 2
0
        /// <summary>
        /// Get predicate "x => x.ActivitiesUnits.Any(y => y.Activity.ActivityCategoryId == value)"
        /// </summary>
        /// <param name="fieldValue"></param>
        /// <param name="operation"></param>
        /// <returns></returns>
        private Expression <Func <StatisticalUnit, bool> > GetActivityPredicate(object fieldValue, OperationEnum operation)
        {
            var subCategoriesIds = fieldValue;

            if (operation == OperationEnum.Equal || operation == OperationEnum.NotEqual || operation == OperationEnum.InList)
            {
                var provider = Configuration
                               .GetSection(nameof(ConnectionSettings))
                               .Get <ConnectionSettings>()
                               .ParseProvider();
                IDbDataProvider dataProvider;

                switch (provider)
                {
                case ConnectionProvider.SqlServer:
                    dataProvider = new MsSqlDbDataProvider();
                    break;

                case ConnectionProvider.PostgreSql:
                    dataProvider = new PostgreSqlDbDataProvider();
                    break;

                case ConnectionProvider.MySql:
                    dataProvider = new MySqlDataProvider();
                    break;

                default: throw new Exception(Resources.Languages.Resource.ProviderIsNotSet);
                }

                subCategoriesIds = string.Join(",", operation == OperationEnum.InList
                    ? dataProvider.GetActivityChildren(DbContext, null, fieldValue)
                    : dataProvider.GetActivityChildren(DbContext, fieldValue, null));
            }


            var outerParameter = Expression.Parameter(typeof(StatisticalUnit), "x");
            var property       = Expression.Property(outerParameter, nameof(StatisticalUnit.ActivitiesUnits));

            var innerParameter = Expression.Parameter(typeof(ActivityStatisticalUnit), "y");
            var categoryId     = Expression
                                 .Property(innerParameter, typeof(ActivityStatisticalUnit)
                                           .GetProperty(nameof(ActivityStatisticalUnit.Activity)));

            categoryId = Expression
                         .Property(categoryId, typeof(Activity)
                                   .GetProperty(nameof(Activity.ActivityCategoryId)));

            var value = GetConstantValue(subCategoriesIds, categoryId,
                                         operation == OperationEnum.Equal
                ? OperationEnum.InList : operation == OperationEnum.NotEqual
                ? OperationEnum.NotInList : operation);

            var innerExpression = GetExpressionForMultiselectFields(categoryId, value, operation);

            var call = Expression.Call(typeof(Enumerable), "Any", new[] { typeof(ActivityStatisticalUnit) }, property,
                                       Expression.Lambda <Func <ActivityStatisticalUnit, bool> >(innerExpression, innerParameter));

            return(Expression.Lambda <Func <StatisticalUnit, bool> >(call, outerParameter));
        }
Exemplo n.º 3
0
        private async Task <List <ReportTree> > GetReportsTreeByProvider(NSCRegDbContext context, string sqlWalletUser)
        {
            List <ReportTree> queryResult;
            var provider = _configuration
                           .GetSection(nameof(ConnectionSettings))
                           .Get <ConnectionSettings>()
                           .ParseProvider();

            try
            {
                IDbDataProvider dbDataProvider;
                switch (provider)
                {
                case ConnectionProvider.SqlServer:
                    dbDataProvider = new MsSqlDbDataProvider();
                    break;

                case ConnectionProvider.PostgreSql:
                    dbDataProvider = new PostgreSqlDbDataProvider();
                    break;

                case ConnectionProvider.MySql:
                    dbDataProvider = new MySqlDataProvider();
                    break;

                default: throw new Exception(Resource.ProviderIsNotSet);
                }

                queryResult = await dbDataProvider.GetReportsTree(_ctx, sqlWalletUser, _configuration);

                return(queryResult);
            }
            catch (Exception e)
            {
                throw new Exception($"An error occured while trying get data of reports from database. Message: {e.Message}");
            }
        }