1>MainPageController的GetForecastAir方法
var stationDataQuery = efAir.FindAll<T_MID_FORECASTSTATISTICS>(d => d.MONITORTIME == lastDate && d.FORECASTTIME > lastMoniDate);
stationDataQuery = stationDataQuery.Where(t => t.MODEL == "0");var s1 = stationDataQuery.ToList();
var stationMonitorQuery = efAir.FindAll<T_MID_CityAIRQUALITYDAY>(d => d.MONIDATE > firstDate && d.REGIONCODE == cityid);
//d.MONIDATE < lastDate && 有3.16号的日均值监测数据,从3.14号开始无预测数据
//站点信息var stationInfoQuery = efAir.FindAll<T_BAS_AIRSTATION>(d => d.REGIONCODE == cityid && d.ISSTAT != 0);// && d.ISSTAT != 0
//连接查询获取预报数据。
var datas = (
from s in stationInfoQuery
join d in stationDataQuery on s.STATIONCODE equals d.STATIONCODE
select new
{
REGIONCODE = s.REGIONCODE,
MONITORTIME = d.FORECASTTIME,
CO = (decimal)d.CO,
NO2 = (short)d.NO2,
O3 = (short)d.O3,
O38H = (short)d.O38H,
PM10 = (short)d.PM10,
PM25 = (short)d.PM25,
SO2 = (short)d.SO2
}
)
.ToList()
.GroupBy(g => new { g.REGIONCODE, g.MONITORTIME })
.Select(t => new
{
REGIONCODE = t.Key.REGIONCODE,
CO = t.Average(x => x.CO),//GetAvgValue(t, x => x.CO), //s.Average(x => x.CO),
NO2 = t.Average(x => x.NO2),//GetAvgValue(s, x => x.NO2),
O3 = t.Average(x => x.O3),//GetAvgValue(s, x => x.O3),
O38H = t.Average(x => x.O38H),//GetAvgValue(s, x => x.O3),
PM10 = t.Average(x => x.PM10),//GetAvgValue(s, x => x.PM10),
PM25 = t.Average(x => x.PM25),//GetAvgValue(s, x => x.PM25),
SO2 = t.Average(x => x.SO2),//GetAvgValue(s, x => x.SO2)
MONIDATE = t.Max(x => x.MONITORTIME)
});
//污染物浓度为0的不参与市均值的计算20160821
//计算CO的市均值
var stationDataQuery_co = stationDataQuery.Where(s => s.CO > 0);
var data_co = (
from s in stationInfoQuery
join d in stationDataQuery_co on s.STATIONCODE equals d.STATIONCODE
select new
{
REGIONCODE = s.REGIONCODE,
MONITORTIME = d.FORECASTTIME,
CO = (decimal)d.CO,
}
)
.ToList()
.GroupBy(g => new { g.REGIONCODE, g.MONITORTIME })
.Select(t => new
{
REGIONCODE = t.Key.REGIONCODE,
CO = t.Average(x => x.CO),
MONIDATE = t.Max(x => x.MONITORTIME)
});
//计算NO2的市均值
var stationDataQuery_NO2 = stationDataQuery.Where(s => s.NO2 > 0);
var data_NO2 = (
from s in stationInfoQuery
join d in stationDataQuery_NO2 on s.STATIONCODE equals d.STATIONCODE
select new
{
REGIONNO2DE = s.REGIONCODE,
MONITORTIME = d.FORECASTTIME,
NO2 = (decimal)d.NO2,
}
)
.ToList()
.GroupBy(g => new { g.REGIONNO2DE, g.MONITORTIME })
.Select(t => new
{
REGIONNO2DE = t.Key.REGIONNO2DE,
NO2 = t.Average(x => x.NO2),
MONIDATE = t.Max(x => x.MONITORTIME)
});
//计算SO2的市均值
var stationDataQuery_SO2 = stationDataQuery.Where(s => s.SO2 > 0);
var data_SO2 = (
from s in stationInfoQuery
join d in stationDataQuery_SO2 on s.STATIONCODE equals d.STATIONCODE
select new
{
REGIONSO2DE = s.REGIONCODE,
MONITORTIME = d.FORECASTTIME,
SO2 = (decimal)d.SO2,
}
)
.ToList()
.GroupBy(g => new { g.REGIONSO2DE, g.MONITORTIME })
.Select(t => new
{
REGIONSO2DE = t.Key.REGIONSO2DE,
SO2 = t.Average(x => x.SO2),
MONIDATE = t.Max(x => x.MONITORTIME)
});
//计算O3的市均值
var stationDataQuery_O3 = stationDataQuery.Where(s => s.O3 > 0);
var data_O3 = (
from s in stationInfoQuery
join d in stationDataQuery_O3 on s.STATIONCODE equals d.STATIONCODE
select new
{
REGIONO3DE = s.REGIONCODE,
MONITORTIME = d.FORECASTTIME,
O3 = (decimal)d.O3,
}
)
.ToList()
.GroupBy(g => new { g.REGIONO3DE, g.MONITORTIME })
.Select(t => new
{
REGIONO3DE = t.Key.REGIONO3DE,
O3 = t.Average(x => x.O3),
MONIDATE = t.Max(x => x.MONITORTIME)
});
//计算O38H的市均值
var stationDataQuery_O38H = stationDataQuery.Where(s => s.O38H > 0);
var data_O38H = (
from s in stationInfoQuery
join d in stationDataQuery_O38H on s.STATIONCODE equals d.STATIONCODE
select new
{
REGIONO38HDE = s.REGIONCODE,
MONITORTIME = d.FORECASTTIME,
O38H = (decimal)d.O38H,
}
)
.ToList()
.GroupBy(g => new { g.REGIONO38HDE, g.MONITORTIME })
.Select(t => new
{
REGIONO38HDE = t.Key.REGIONO38HDE,
O38H = t.Average(x => x.O38H),
MONIDATE = t.Max(x => x.MONITORTIME)
});
//计算PM10的市均值
var stationDataQuery_PM10 = stationDataQuery.Where(s => s.PM10 > 0);
var data_PM10 = (
from s in stationInfoQuery
join d in stationDataQuery_PM10 on s.STATIONCODE equals d.STATIONCODE
select new
{
REGIONPM10DE = s.REGIONCODE,
MONITORTIME = d.FORECASTTIME,
PM10 = (decimal)d.PM10,
}
)
.ToList()
.GroupBy(g => new { g.REGIONPM10DE, g.MONITORTIME })
.Select(t => new
{
REGIONPM10DE = t.Key.REGIONPM10DE,
PM10 = t.Average(x => x.PM10),
MONIDATE = t.Max(x => x.MONITORTIME)
});
//计算PM25的市均值
var stationDataQuery_PM25 = stationDataQuery.Where(s => s.PM25 > 0);
var data_PM25 = (
from s in stationInfoQuery
join d in stationDataQuery_PM25 on s.STATIONCODE equals d.STATIONCODE
select new
{
REGIONPM25DE = s.REGIONCODE,
MONITORTIME = d.FORECASTTIME,
PM25 = (decimal)d.PM25,
}
)
.ToList()
.GroupBy(g => new { g.REGIONPM25DE, g.MONITORTIME })
.Select(t => new
{
REGIONPM25DE = t.Key.REGIONPM25DE,
PM25 = t.Average(x => x.PM25),
MONIDATE = t.Max(x => x.MONITORTIME)
});
var data7 = (
from s in datas
join d1 in data_co on s.MONIDATE equals d1.MONIDATE
join d2 in data_NO2 on s.MONIDATE equals d2.MONIDATE
join d3 in data_SO2 on s.MONIDATE equals d3.MONIDATE
join d4 in data_O3 on s.MONIDATE equals d4.MONIDATE
join d5 in data_O38H on s.MONIDATE equals d5.MONIDATE
join d6 in data_PM10 on s.MONIDATE equals d6.MONIDATE
join d7 in data_PM25 on s.MONIDATE equals d7.MONIDATE
select new
{
REGIONCODE = s.REGIONCODE,
MONIDATE = s.MONIDATE,
CO = (decimal)d1.CO,
NO2 = (short)d2.NO2,
SO2 = (short)d3.SO2,
O3 = (short)d4.O3,
O38H = (short)d5.O38H,
PM10 = (short)d6.PM10,
PM25 = (short)d7.PM25
});
//计算市均值
foreach (var item in data7)//datas__20160821去掉0求平均
2>ReportController的avgCityNum方法
ReportController的LoadForeAvgAQIData方法
//污染物浓度为0的不参与市均值的计算20160821
//计算CO的市均值
var stationDataQuery_co = stationDataQuery.Where(s => s.CO > 0);
var data_co = (
from s in stationInfoQuery
join d in stationDataQuery_co on s.STATIONCODE equals d.STATIONCODE
select new
{
REGIONCODE=s.REGIONCODE,
MONITORTIME = d.FORECASTTIME,
CO = (decimal)d.CO,
}
)
.ToList()
.GroupBy(g => new { g.REGIONCODE, g.MONITORTIME })
.Select(t => new
{
REGIONCODE=t.Key.REGIONCODE,
CO = t.Average(x => x.CO),
MONIDATE = t.Max(x => x.MONITORTIME)
});
//计算NO2的市均值
var stationDataQuery_NO2 = stationDataQuery.Where(s => s.NO2 > 0);
var data_NO2 = (
from s in stationInfoQuery
join d in stationDataQuery_NO2 on s.STATIONCODE equals d.STATIONCODE
select new
{
REGIONCODE = s.REGIONCODE,
MONITORTIME = d.FORECASTTIME,
NO2 = (decimal)d.NO2,
}
)
.ToList()
.GroupBy(g => new { g.REGIONCODE, g.MONITORTIME })
.Select(t => new
{
REGIONCODE = t.Key.REGIONCODE,
NO2 = t.Average(x => x.NO2),
MONIDATE = t.Max(x => x.MONITORTIME)
});
//计算SO2的市均值
var stationDataQuery_SO2 = stationDataQuery.Where(s => s.SO2 > 0);
var data_SO2 = (
from s in stationInfoQuery
join d in stationDataQuery_SO2 on s.STATIONCODE equals d.STATIONCODE
select new
{
REGIONCODE = s.REGIONCODE,
MONITORTIME = d.FORECASTTIME,
SO2 = (decimal)d.SO2,
}
)
.ToList()
.GroupBy(g => new { g.REGIONCODE, g.MONITORTIME })
.Select(t => new
{
REGIONCODE = t.Key.REGIONCODE,
SO2 = t.Average(x => x.SO2),
MONIDATE = t.Max(x => x.MONITORTIME)
});
//计算O3的市均值
var stationDataQuery_O3 = stationDataQuery.Where(s => s.O3 > 0);
var data_O3 = (
from s in stationInfoQuery
join d in stationDataQuery_O3 on s.STATIONCODE equals d.STATIONCODE
select new
{
REGIONCODE = s.REGIONCODE,
MONITORTIME = d.FORECASTTIME,
O3 = (decimal)d.O3,
}
)
.ToList()
.GroupBy(g => new { g.REGIONCODE, g.MONITORTIME })
.Select(t => new
{
REGIONCODE = t.Key.REGIONCODE,
O3 = t.Average(x => x.O3),
MONIDATE = t.Max(x => x.MONITORTIME)
});
//计算O38H的市均值
var stationDataQuery_O38H = stationDataQuery.Where(s => s.O38H > 0);
var data_O38H = (
from s in stationInfoQuery
join d in stationDataQuery_O38H on s.STATIONCODE equals d.STATIONCODE
select new
{
REGIONCODE = s.REGIONCODE,
MONITORTIME = d.FORECASTTIME,
O38H = (decimal)d.O38H,
}
)
.ToList()
.GroupBy(g => new { g.REGIONCODE, g.MONITORTIME })
.Select(t => new
{
REGIONCODE = t.Key.REGIONCODE,
O38H = t.Average(x => x.O38H),
MONIDATE = t.Max(x => x.MONITORTIME)
});
//计算PM10的市均值
var stationDataQuery_PM10 = stationDataQuery.Where(s => s.PM10 > 0);
var data_PM10 = (
from s in stationInfoQuery
join d in stationDataQuery_PM10 on s.STATIONCODE equals d.STATIONCODE
select new
{
REGIONCODE = s.REGIONCODE,
MONITORTIME = d.FORECASTTIME,
PM10 = (decimal)d.PM10,
}
)
.ToList()
.GroupBy(g => new { g.REGIONCODE, g.MONITORTIME })
.Select(t => new
{
REGIONCODE = t.Key.REGIONCODE,
PM10 = t.Average(x => x.PM10),
MONIDATE = t.Max(x => x.MONITORTIME)
});
//计算PM25的市均值
var stationDataQuery_PM25 = stationDataQuery.Where(s => s.PM25 > 0);
var data_PM25 = (
from s in stationInfoQuery
join d in stationDataQuery_PM25 on s.STATIONCODE equals d.STATIONCODE
select new
{
REGIONCODE = s.REGIONCODE,
MONITORTIME = d.FORECASTTIME,
PM25 = (decimal)d.PM25,
}
)
.ToList()
.GroupBy(g => new { g.REGIONCODE, g.MONITORTIME })
.Select(t => new
{
REGIONCODE = t.Key.REGIONCODE,
PM25 = t.Average(x => x.PM25),
MONIDATE = t.Max(x => x.MONITORTIME)
});
var data7 = (
from s in data4
//join d1 in data_co on new { s.FORECASTTIME, s.REGIONCODE }
// equals new { d1.MONIDATE, d1.REGIONCODE }
join d1 in data_co on s.FORECASTTIME equals d1.MONIDATE
where s.REGIONCODE==d1.REGIONCODE
join d2 in data_NO2 on s.FORECASTTIME equals d2.MONIDATE
where s.REGIONCODE == d2.REGIONCODE
join d3 in data_SO2 on s.FORECASTTIME equals d3.MONIDATE
where s.REGIONCODE == d3.REGIONCODE
join d4 in data_O3 on s.FORECASTTIME equals d4.MONIDATE
where s.REGIONCODE == d4.REGIONCODE
join d5 in data_O38H on s.FORECASTTIME equals d5.MONIDATE
where s.REGIONCODE == d5.REGIONCODE
join d6 in data_PM10 on s.FORECASTTIME equals d6.MONIDATE
where s.REGIONCODE == d6.REGIONCODE
join d7 in data_PM25 on s.FORECASTTIME equals d7.MONIDATE
where s.REGIONCODE == d7.REGIONCODE
select new
{
REGIONCODE = s.REGIONCODE,
FORECASTTIME = s.FORECASTTIME,
REGIONNAME = s.REGIONNAME,
CO = (decimal)d1.CO,
NO2 = (short)d2.NO2,
SO2 = (short)d3.SO2,
O3 = (short)d4.O3,
O38H = (short)d5.O38H,
PM10 = (short)d6.PM10,
PM25 = (short)d7.PM25
}).OrderBy(a => a.REGIONCODE);
foreach (var item in data7)//data4__20160821去掉0求平均
3>PatternForecastController的getDataByWhere方法
DidPeriodForeController的getDataByWhere方法
AccuracyRateController的getAvgFore方法
//污染物浓度为0的不参与市均值的计算20160821
//计算CO的市均值
var stationDataQuery_co = datas.Where(s => s.CO > 0);
var data_co = (
from s in stationInfoQuery
join d in stationDataQuery_co on s.STATIONCODE equals d.STATIONCODE
select new
{
REGIONCODE = s.REGIONCODE,
MONITORTIME = d.MONITORTIME,
FORECASTTIME = d.FORECASTTIME,
CO = (decimal)d.CO,
}
)
.ToList()
.GroupBy(g => new { g.REGIONCODE, g.MONITORTIME, g.FORECASTTIME })
.Select(t => new
{
REGIONCODE = t.Key.REGIONCODE,
CO = t.Average(x => x.CO),
MONITORTIME = t.Max(x => x.MONITORTIME),
FORECASTTIME = t.Max(x => x.FORECASTTIME)
});
//计算NO2的市均值
var stationDataQuery_NO2 = datas.Where(s => s.NO2 > 0);
var data_NO2 = (
from s in stationInfoQuery
join d in stationDataQuery_NO2 on s.STATIONCODE equals d.STATIONCODE
select new
{
REGIONCODE = s.REGIONCODE,
MONITORTIME = d.MONITORTIME,
FORECASTTIME = d.FORECASTTIME,
NO2 = (decimal)d.NO2,
}
)
.ToList()
.GroupBy(g => new { g.REGIONCODE, g.MONITORTIME, g.FORECASTTIME })
.Select(t => new
{
REGIONCODE = t.Key.REGIONCODE,
NO2 = t.Average(x => x.NO2),
MONITORTIME = t.Max(x => x.MONITORTIME),
FORECASTTIME = t.Max(x => x.FORECASTTIME)
});
//计算SO2的市均值
var stationDataQuery_SO2 = datas.Where(s => s.SO2 > 0);
var data_SO2 = (
from s in stationInfoQuery
join d in stationDataQuery_SO2 on s.STATIONCODE equals d.STATIONCODE
select new
{
REGIONCODE = s.REGIONCODE,
MONITORTIME = d.MONITORTIME,
FORECASTTIME = d.FORECASTTIME,
SO2 = (decimal)d.SO2,
}
)
.ToList()
.GroupBy(g => new { g.REGIONCODE, g.MONITORTIME, g.FORECASTTIME })
.Select(t => new
{
REGIONCODE = t.Key.REGIONCODE,
SO2 = t.Average(x => x.SO2),
MONITORTIME = t.Max(x => x.MONITORTIME),
FORECASTTIME = t.Max(x => x.FORECASTTIME)
});
//计算O3的市均值
var stationDataQuery_O3 = datas.Where(s => s.O3 > 0);
var data_O3 = (
from s in stationInfoQuery
join d in stationDataQuery_O3 on s.STATIONCODE equals d.STATIONCODE
select new
{
REGIONCODE = s.REGIONCODE,
MONITORTIME = d.MONITORTIME,
FORECASTTIME = d.FORECASTTIME,
O3 = (decimal)d.O3,
}
)
.ToList()
.GroupBy(g => new { g.REGIONCODE, g.MONITORTIME, g.FORECASTTIME })
.Select(t => new
{
REGIONCODE = t.Key.REGIONCODE,
O3 = t.Average(x => x.O3),
MONITORTIME = t.Max(x => x.MONITORTIME),
FORECASTTIME = t.Max(x => x.FORECASTTIME)
});
//计算O38H的市均值
var stationDataQuery_O38H = datas.Where(s => s.O38H > 0);
var data_O38H = (
from s in stationInfoQuery
join d in stationDataQuery_O38H on s.STATIONCODE equals d.STATIONCODE
select new
{
REGIONCODE = s.REGIONCODE,
MONITORTIME = d.MONITORTIME,
FORECASTTIME = d.FORECASTTIME,
O38H = (decimal)d.O38H,
}
)
.ToList()
.GroupBy(g => new { g.REGIONCODE, g.MONITORTIME, g.FORECASTTIME })
.Select(t => new
{
REGIONCODE = t.Key.REGIONCODE,
O38H = t.Average(x => x.O38H),
MONITORTIME = t.Max(x => x.MONITORTIME),
FORECASTTIME = t.Max(x => x.FORECASTTIME)
});
//计算PM10的市均值
var stationDataQuery_PM10 = datas.Where(s => s.PM10 > 0);
var data_PM10 = (
from s in stationInfoQuery
join d in stationDataQuery_PM10 on s.STATIONCODE equals d.STATIONCODE
select new
{
REGIONCODE = s.REGIONCODE,
MONITORTIME = d.MONITORTIME,
FORECASTTIME = d.FORECASTTIME,
PM10 = (decimal)d.PM10,
}
)
.ToList()
.GroupBy(g => new { g.REGIONCODE, g.MONITORTIME, g.FORECASTTIME })
.Select(t => new
{
REGIONCODE = t.Key.REGIONCODE,
PM10 = t.Average(x => x.PM10),
MONITORTIME = t.Max(x => x.MONITORTIME),
FORECASTTIME = t.Max(x => x.FORECASTTIME)
});
//计算PM25的市均值
var stationDataQuery_PM25 = datas.Where(s => s.PM25 > 0);
var data_PM25 = (
from s in stationInfoQuery
join d in stationDataQuery_PM25 on s.STATIONCODE equals d.STATIONCODE
select new
{
REGIONCODE = s.REGIONCODE,
MONITORTIME = d.MONITORTIME,
FORECASTTIME = d.FORECASTTIME,
PM25 = (decimal)d.PM25,
}
)
.ToList()
.GroupBy(g => new { g.REGIONCODE, g.MONITORTIME, g.FORECASTTIME })
.Select(t => new
{
REGIONCODE = t.Key.REGIONCODE,
PM25 = t.Average(x => x.PM25),
MONITORTIME = t.Max(x => x.MONITORTIME),
FORECASTTIME = t.Max(x => x.FORECASTTIME)
});
var data7 = (
from s in dataNew
//join d1 in data_co on new { s.FORECASTTIME, s.REGIONCODE }
// equals new { d1.MONIDATE, d1.REGIONCODE }
join d1 in data_co on new { s.MONITORTIME,s.FORECASTTIME } equals new { d1.MONITORTIME,d1.FORECASTTIME }
where s.REGIONCODE == d1.REGIONCODE
join d2 in data_NO2 on new { s.MONITORTIME, s.FORECASTTIME } equals new { d2.MONITORTIME, d2.FORECASTTIME }
where s.REGIONCODE == d2.REGIONCODE
join d3 in data_SO2 on new { s.MONITORTIME,s.FORECASTTIME } equals new { d3.MONITORTIME,d3.FORECASTTIME }
where s.REGIONCODE == d3.REGIONCODE
join d4 in data_O3 on new { s.MONITORTIME,s.FORECASTTIME } equals new { d4.MONITORTIME,d4.FORECASTTIME }
where s.REGIONCODE == d4.REGIONCODE
join d5 in data_O38H on new { s.MONITORTIME,s.FORECASTTIME } equals new { d5.MONITORTIME,d5.FORECASTTIME }
where s.REGIONCODE == d5.REGIONCODE
join d6 in data_PM10 on new { s.MONITORTIME,s.FORECASTTIME } equals new { d6.MONITORTIME,d6.FORECASTTIME }
where s.REGIONCODE == d6.REGIONCODE
join d7 in data_PM25 on new { s.MONITORTIME,s.FORECASTTIME } equals new { d7.MONITORTIME,d7.FORECASTTIME }
where s.REGIONCODE == d7.REGIONCODE
select new
{
REGIONCODE = s.REGIONCODE,
MONITORTIME=s.MONITORTIME,
FORECASTTIME = s.FORECASTTIME,
REGIONNAME = s.REGIONNAME,
CO = (decimal)d1.CO,
NO2 = (short)d2.NO2,
SO2 = (short)d3.SO2,
O3 = (short)d4.O3,
O38H = (short)d5.O38H,
PM10 = (short)d6.PM10,
PM25 = (short)d7.PM25
}).OrderBy(a => a.REGIONCODE).ToList();;
//求各市均值
foreach (var item in data7)//dataNew__20160821去掉0求平均