/// <summary>
/// Linq 连接查询
/// Geovin Du
/// 涂聚文
/// https://docs.microsoft.com/en-us/dotnet/csharp/linq/perform-inner-joins
/// </summary>
/// <param name="confirmed"></param>
/// <param name="deaths"></param>
/// <param name="recovered"></param>
/// <returns></returns>
public List<HistoryList> getUnionNumber(List<History> confirmed, List<History> deaths, List<History> recovered)
{
List<HistoryList> list = new List<HistoryList>();
if (recovered.Count > 0)
{
HistoryList newinfo = null;
//1 种方法
var newinfto = (from d in confirmed
join c in deaths on d.datename equals c.datename
join s in recovered on c.datename equals s.datename
select new
{
datename = d.datename,//
numberConfirmed = d.number,//
numberDeaths = c.number, //
numberRecovered = s.number //
}).ToList();
int k = 1;
foreach (var ownerAndDu in newinfto)
{
newinfo = new HistoryList();
newinfo.Id = k;
newinfo.datename = ownerAndDu.datename;
newinfo.numberConfirmed = ownerAndDu.numberConfirmed;
newinfo.numberDeaths = ownerAndDu.numberDeaths;
newinfo.numberRecovered = ownerAndDu.numberRecovered;
k++;
list.Add(newinfo);
}
}
else
{
HistoryList newinfo = null;
//1 种方法
var newinfto = from d in confirmed
join c in deaths on d.datename equals c.datename
select new
{
datename = d.datename,
numberConfirmed = d.number,
numberDeaths = c.number
};
int k = 1;
foreach (var ownerAndDu in newinfto)
{
newinfo = new HistoryList();
newinfo.Id = k;
newinfo.datename = ownerAndDu.datename;
newinfo.numberConfirmed = ownerAndDu.numberConfirmed;
newinfo.numberDeaths = ownerAndDu.numberDeaths;
k++;
list.Add(newinfo);
}
}
#region
//for (int i = 0; i < confirmed.Count; i++)
//{
// HistoryList newinfo = null;
// if (recovered.Count > 0)
// {
// //var ss1 =confirmed.Join(deaths, p => p.datename, r => r.datename, (p, r) => p).OrderByDescending(p => p.datename).ToList();
// //2 种方法
// if (confirmed[i].datename == deaths[i].datename && confirmed[i].datename == recovered[i].datename)
// {
// newinfo = new HistoryList();
// newinfo.datename = confirmed[i].datename;
// newinfo.numberConfirmed = confirmed[i].number;
// newinfo.numberDeaths = deaths[i].number;
// newinfo.numberRecovered = recovered[i].number;
// list.Add(newinfo);
// }
// }
// else
// {
// //2 种方法
// if (confirmed[i].datename == deaths[i].datename)
// {
// newinfo = new HistoryList();
// newinfo.datename = confirmed[i].datename;
// newinfo.numberConfirmed = confirmed[i].number;
// newinfo.numberDeaths = deaths[i].number;
// list.Add(newinfo);
// }
// }
#endregion
return list;
}
/// <summary>
///
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void Page_Load(object sender, EventArgs e)
{
try
{
if (!IsPostBack)
{
id = Request.QueryString["Id"];
type = Request.QueryString["type"];
country = Request.QueryString["country"];
province = Request.QueryString["province"];
Response.Write("Value:"+id + "," + type+","+country+","+province);
change(int.Parse(type));
List<Location> lodea = col.deaths.locations.Where(x => x.country == country && x.province==province).ToList();
//List<Location> lodea = dea.locations.Where(x => x.country == "US").ToList();
//List<Location> locir = conf.locations.Where(x => x.country == "US").ToList();
List<Location> locir = col.confirmed.locations.Where(x => x.country == country && x.province == province).ToList();
// List<Location> lorec = recov.locations.Where(x => x.country == "US").ToList();
List<Location> lorec = col.recovered.locations.Where(x => x.country == country && x.province == province).ToList();
//in
var geovindu = from geovi in col.recovered.locations
where (new string[] { "china", "chile", "Canada" }).Contains(geovi.country)
select geovi;
List<History> hidea = lodea[0].history; // dea.locations.Where(x => x.country == "Yemen").ToList().Where(x => x.history.All).ToList();
List<History> hicor = locir[0].history;
List<History> hirec=new List<History>();
if(lorec.Count>0)
{
hirec = lorec[0].history;
}
List<HistoryList> uniolist = new List<HistoryList>();
uniolist = getUnionNumber(hicor, hidea, hirec);
//分页查询
var geovin = (from du in uniolist
where du.Id > 10
orderby du.Id descending
select du).Skip(10).Take(10); //取第11条到第20条数据
this.GridView1.DataSource = uniolist;
this.GridView1.DataBind();
}
}
catch (Exception ex)
{
Response.Write(ex.Message.ToString());
}
}
}
数据来源测试: https://coronavirus-tracker-api.herokuapp.com/all
来源:oschina
链接:https://my.oschina.net/u/4408441/blog/4280309