public RangeModel GetRange(BenchmarkingGruppenTyp benchmarkingGruppenTyp, MandantDetails currentMandantDetails) { var dataBaseEigenschaftTyp = benchmarkingGruppenTyp.ToDataBaseEigenschaftTyp(); var wert = GetBenchmarkingGruppenWert(currentMandantDetails, benchmarkingGruppenTyp); var benchmarkingGruppenConfigurations = transactionScopeProvider.Queryable <BenchmarkingGruppenConfiguration>().Where(bgc => bgc.EigenschaftTyp == dataBaseEigenschaftTyp); return(new RangeModel { BenchmarkingGruppen = benchmarkingGruppenTyp, UntereInclusieveGrenzwert = benchmarkingGruppenConfigurations.Where(bgc => bgc.Grenzwert <= wert).OrderByDescending(bgc => bgc.Grenzwert).Select(bgc => (decimal?)bgc.Grenzwert).FirstOrDefault(), ObereExclusiveGrenzwert = benchmarkingGruppenConfigurations.Where(bgc => bgc.Grenzwert > wert).OrderBy(bgc => bgc.Grenzwert).Select(bgc => (decimal?)bgc.Grenzwert).FirstOrDefault(), }); }
private IQueryOver <MandantDetails, MandantDetails> BuildQueryOver <TProperty>(Expression <Func <MandantDetails, TProperty> > expression, IQueryOver <MandantDetails, MandantDetails> queryOver, BenchmarkingGruppenTyp benchmarkingGruppenTyp, MandantDetails currentMandantDetails) { string propertyName = ExpressionHelper.GetPropertyName(expression); var rangeModel = benchmarkingGruppenConfigurationService.GetRange(benchmarkingGruppenTyp, currentMandantDetails); if (rangeModel.UntereInclusieveGrenzwert.HasValue) { queryOver = queryOver.Where(Restrictions.Ge(propertyName, Convert <TProperty>(rangeModel.UntereInclusieveGrenzwert.Value))); } if (rangeModel.ObereExclusiveGrenzwert.HasValue) { queryOver = queryOver.Where(Restrictions.Lt(propertyName, Convert <TProperty>(rangeModel.ObereExclusiveGrenzwert.Value))); } return(queryOver); }
public static string ToDataBaseEigenschaftTyp(this BenchmarkingGruppenTyp benchmarkingGruppenTyp) { return(benchmarkingGruppenTyp.ToString() + "Grenze"); }
private decimal GetBenchmarkingGruppenWert(MandantDetails mandantDetailsModel, BenchmarkingGruppenTyp benchmarkingGruppenTyp) { switch (benchmarkingGruppenTyp) { case BenchmarkingGruppenTyp.NetzGroesse: return(mandantDetailsModel.NetzLaenge); case BenchmarkingGruppenTyp.EinwohnerGroesse: return(mandantDetailsModel.Einwohner ?? 0); case BenchmarkingGruppenTyp.MittlereHoehenlageSiedlungsgebieteGroesse: return(mandantDetailsModel.MittlereHoehenlageSiedlungsgebiete ?? 0); case BenchmarkingGruppenTyp.SteuerertragGroesse: return(mandantDetailsModel.Steuerertrag ?? 0); default: throw new ArgumentOutOfRangeException("benchmarkingGruppenTyp"); } }