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