GroupBy分组的运用和linq左连接

本文详细介绍了LINQ中的GroupBy操作,包括最简单的分组、组内排序、获取组内第一个元素,以及如何进行多次分组组合。同时,文章还补充了一个关于LINQ左连接(Left Join)在多表关联中去除空数据的示例。
摘要由CSDN通过智能技术生成

最简单的分组

var conHistoryList = conHistoryData.GroupBy(g => g.personId);

就是conHistoryData是一个IQueryable<T>类型;

分组后组内排序

var conHistoryList = conHistoryData.GroupBy(g => g.personId).Select(g => g.OrderBy(c => c.addTime));

对数据分组之后在根据每一个分组内的某一个元素排序。

分组后排序返回第一个

 var conHistoryList = conHistoryData.GroupBy(g => g.personId).Select(g => g.OrderBy(c => c.addTime).FirstOrDefault()).ToList();

对数据分组之后在根据每一个分组内的某一个元素排序。排序之后在返回第一个元素,然后组成一个集合返回。这个实现的是根据分组取组内第一个元素然后重新返回一个元素列表。

使用组内元素

var dd = conHistoryData.GroupBy(g => g.personId);
                //获取每个分组的键
                foreach (var item in dd)
                {
                    string GroupByKey = item.Key;
                    //获取每个分组的内容
                    foreach (var item2 in item)
                    {
                        ContractHistoryInfor historyInfor = item2;
                    }
                }

多次分组组合

var childDetailListData = new List<ChildFactDetailInfor>();
var childDetailListG = childDetailList.GroupBy(b => b.materialCategory).Select(g => g.GroupBy(b => b.materialNum));               

childDetailList是一个List<ChildFactDetailInfor>集合。通过先分组materialCategory字段,然后在在分组内根据materialNum字段再次分组。

使用多次分组的元素

var childDetailListData = new List<ChildFactDetailInfor>();
                var childDetailListG = childDetailList.GroupBy(b => b.materialCategory).Select(g => g.GroupBy(b => b.materialNum));
                foreach (var item in childDetailListG)
                {
                    foreach (var item2 in item)
                    {
                        decimal? a = item2.Sum(x => x.materialNum);
                        decimal? c = item2.Sum(x => x.priceTotal); foreach (var item3 in item2) { item3.materialNum = a; item3.priceTotal = c; childDetailListData.Add(item3); } } }

和上面使用元素差不多就是遍历层数

 补充记录一个linq左连接多表关联去除控数据示例:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值