Exemplo n.º 1
0
        /// <summary>
        /// Get timeseries on facility level
        /// </summary>
        public static List <TimeSeriesClasses.PollutantReleases> GetTimeSeries(int facilityid, string pollutantCode, MediumFilter.Medium medium)
        {
            DataClassesPollutantReleaseDataContext db = getDataContext();

            //apply medium condition
            Expression <Func <POLLUTANTRELEASE, bool> > lambda = getLambdaExpression(medium);

            // get data and group by year (which get assigned to x.Key by link)

            IQueryable <IGrouping <int, POLLUTANTRELEASE> > group = db.POLLUTANTRELEASEs.Where(f => f.FacilityID == facilityid && f.PollutantCode == pollutantCode).Where(lambda).GroupBy(p => p.ReportingYear);

            // lookup medium
            IEnumerable <TimeSeriesClasses.PollutantReleases> data = null;

            switch (medium)
            {
            case MediumFilter.Medium.Air:
                data = group.Select(x => new TimeSeriesClasses.PollutantReleases(x.Key, x.Count(), x.Sum(p => p.QuantityAir), x.Sum(p => p.QuantityAccidentalAir)));
                break;

            case MediumFilter.Medium.Soil:
                data = group.Select(x => new TimeSeriesClasses.PollutantReleases(x.Key, x.Count(), x.Sum(p => p.QuantitySoil), x.Sum(p => p.QuantityAccidentalSoil)));
                break;

            case MediumFilter.Medium.Water:
                data = group.Select(x => new TimeSeriesClasses.PollutantReleases(x.Key, x.Count(), x.Sum(p => p.QuantityWater), x.Sum(p => p.QuantityAccidentalWater)));
                break;

            default:
                throw new ArgumentOutOfRangeException("medium", String.Format("Illegal medium: {0}", medium.ToString()));
            }

            return(data.OrderBy(p => p.Year).ToList());
        }
        public static Func <POLLUTANTRELEASE, double?> QuantityTotal(MediumFilter.Medium medium)
        {
            Expression <Func <POLLUTANTRELEASE, double?> > func;

            switch (medium)
            {
            case MediumFilter.Medium.Air:
                func = z => z.QuantityAir;
                break;

            case MediumFilter.Medium.Soil:
                func = z => z.QuantitySoil;
                break;

            case MediumFilter.Medium.Water:
                func = z => z.QuantityWater;
                break;

            default:
                throw new ArgumentOutOfRangeException("medium", String.Format("Illegal medium:{0}", medium.ToString()));
            }
            return(func.Compile());
        }
Exemplo n.º 3
0
        //public static string CODE_TNE = EnumUtil.GetStringValue(QuantityUnit.Tonnes);


        // ---------------------------------------------------------------------------------------------------
        // Time series
        // ---------------------------------------------------------------------------------------------------
        #region timeseries


        /// <summary>
        /// Get timeseries on aggregated level
        /// </summary>
        public static List <TimeSeriesClasses.PollutantReleases> GetTimeSeries(PollutantReleasesTimeSeriesFilter filter, MediumFilter.Medium medium)
        {
            // apply filter
            Expression <Func <POLLUTANTRELEASE, bool> > lambda = getLambdaExpression(filter, medium);

            DataClassesPollutantReleaseDataContext db = getDataContext();

            // get data and group by year (which get assigned to x.Key by link)
            IQueryable <IGrouping <int, POLLUTANTRELEASE> > group = db.POLLUTANTRELEASEs.Where(lambda).GroupBy(p => p.ReportingYear).OrderBy(p => p.Key);

            // lookup medium
            IEnumerable <TimeSeriesClasses.PollutantReleases> data = null;

            switch (medium)
            {
            case MediumFilter.Medium.Air:
                data = group.Select(x => new TimeSeriesClasses.PollutantReleases(x.Key, x.Count(), x.Sum(p => p.QuantityAir), x.Sum(p => p.QuantityAccidentalAir)));
                break;

            case MediumFilter.Medium.Soil:
                data = group.Select(x => new TimeSeriesClasses.PollutantReleases(x.Key, x.Count(), x.Sum(p => p.QuantitySoil), x.Sum(p => p.QuantityAccidentalSoil)));
                break;

            case MediumFilter.Medium.Water:
                data = group.Select(x => new TimeSeriesClasses.PollutantReleases(x.Key, x.Count(), x.Sum(p => p.QuantityWater), x.Sum(p => p.QuantityAccidentalWater)));
                break;

            default:
                throw new ArgumentOutOfRangeException("medium", String.Format("Illegal medium: {0}", medium.ToString()));
            }

            IEnumerable <Facility.ReportingCountries> years = Facility.GetReportingCountries(filter.AreaFilter).ToList();

            IEnumerable <TimeSeriesClasses.PollutantReleases> res = from l in data.ToList()
                                                                    join r in years on l.Year equals r.Year
                                                                    select new TimeSeriesClasses.PollutantReleases(l.Year, l.Facilities, l.Quantity, l.QuantityAccidental, r.Countries);

            return(res.OrderBy(p => p.Year).ToList());
        }