/// <summary> /// Linq 連接查詢 /// Geovin Du /// 塗聚文 /// https://docs.microsoft.com/en-us/dotnet/csharp/linq/perform-inner-joins /// </summary> /// <para ...
/// <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