/// <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)); }
/// <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)); }
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}"); } }