Csharp: Linq Query

     /// <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

posted @ 2020-05-15 22:22  ®Geovin Du Dream Park™  阅读(...)  评论(...编辑  收藏