c# linq 左连接

最简单事例:

var query = from order in orders
            join customer in customers on order.CustomerID equals customer.CustomerID
            group order by customer.Country into g
            select new { Country = g.Key, Total = g.Sum(o => o.Total) };

以前例:


List<ReceivingNote> itemDetails = new List<ReceivingNote>(); var warningData = (from t in itemDetails group t by new { t.BoxNo } into grp select new { grp.Key.BoxNo, Quantity = grp.Count() }).Where(r => r.Quantity > 1); int intDistinctDataCount = warningData.Count(); if (intDistinctDataCount > 0) { string alterMes = "导入文件存在【{0}】组“XX”重复!,请检查导入文件。\n第一组 XX:{1}"; alterMes = string.Format(alterMes, intDistinctDataCount, warningData.ToList()[0].BoxNo); Alert.Show(alterMes); return false; }

将上面代码转成具体实体

 List<WarningDataEntity> warningData = (from t in itemDetails
                               group t by new { t.BoxNo }
                                   into grp
                                   select new WarningDataEntity
                                   {
                                      BoxNo= grp.Key.BoxNo,                                  
                                      CountVue = grp.Count()
                                   }).Where(r => r.CountVue > 1).ToList< WarningDataEntity>();

 

   var todayFinish = ds.Tables[0].AsEnumerable();

                var listTodayFinish = todayFinish
                        .Select(p => new TodayFinishRate
                        {
                            RequireDate = p.Field<DateTime>("RequireDate").ToString("HH:mm"),
                            PickStatus = p.Field<int?>("PickStatus").ToString()
                        }).ToList();

                //按需求时间 汇总 出已经完成出货的记录。
                var GroupTodayFinish = from a in listTodayFinish
                                       where a.PickStatus == "1"
                                       group a by new { a.RequireDate } into g
                                       select new TodayFinishRate
                                       {
                                           RequireDate = g.Key.RequireDate,
                                           FinishCount = g.Count()
                                       };

                //按需求时间 汇总 出已经今天全部叫料记录。
                var GroupTodayFinishAll = from a in listTodayFinish
                                          group a by new { a.RequireDate } into g
                                          select new TodayFinishRate
                                          {
                                              RequireDate = g.Key.RequireDate,
                                              AllCount = g.Count()
                                          };

                var listResult = from all in GroupTodayFinishAll
                                 join a in GroupTodayFinish on all.RequireDate equals a.RequireDate into LeftTmp
                                 from tmp in LeftTmp.DefaultIfEmpty()
                                 select new TodayFinishRate
                                 {
                                     RequireDate = all.RequireDate,
                                     FinishCount = tmp==null?0:tmp.FinishCount,  //这个判断很重要,不然报错,因为tmp可能为null
                                     AllCount = all.AllCount
                                 };

 过滤取最大值

 var listType = new string[]{"提货点已到达","已提货","卸货点已到达" };       
                DateTime? dtDaoDa = itemList.Where(x => listType.Contains(x.Remark) && x.AddressDescr==txtAddress.Text.Trim()).Max(x=>x.CreateOn);

 

posted @ 2022-08-27 16:28  丁焕轩  阅读(426)  评论(0编辑  收藏  举报