Lambda表达式GroupBy多条件分组

本文介绍如何使用SQL进行分组查询并统计特定字段的不重复数量,同时展示了利用LINQ进行复杂数据处理的方法,包括多列分组及统计特定条件的数据记录。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

原数据:
在这里插入图片描述

分组查询sql

select  
 [one_level]
 ,[form_name]
from [appoint_form]
	  group by  
	  [one_level]
      ,[form_name]

在这里插入图片描述
分组统计one_level下的form_name不重复有多少个

var cateList = result.Data.List
                .GroupBy(x => new { One_level = x.One_level, Form_name = x.Form_name })
                .Select(x =>x.Key.One_level).GroupBy(x=>x);        
            List<int> ca_count = new List<int>();
            foreach (var item in cateList)
            {
                ca_count.Add(item.Count());
            }          

统计结果:
1下有3个
2下有2个
3下有3个

写法二

//统计AI审核未通过的文章记录      
var query = cms_Web_MonitorDAL.GetQuery(g => g.Modify_opinion == "建议修改" && g.Web_id == websiteId);
var query2 = query.GroupBy(g => new { g.Article_id, g.Vio_info });//多列分组

//var query2 = query.GroupBy(                   
//         g => new { g.Article_id, g.Vio_info },
//         k => new Cms_node()
//         {
//             C_name = k.Article_id,
//             Hostname = k.Vio_info,
//             Username = k.Vio_url
//         } 
// );     

//获取到分组数据
var ai_check_list = query2.Select(g => g.FirstOrDefault()).ToList();

### 使用 Lambda 表达式实现 Group By 操作 在编程中,`GroupBy` 方法通常用于按照某个键对数据集中的元素进行分组。当与 `Lambda` 表达式一起使用时,可以更简洁地定义分组逻辑。 对于 C# 中的 LINQ 查询来说,可以通过如下方式使用 `Lambda` 实现分组: ```csharp var items = new List<Item> { new Item { Category = "Fruit", Name = "Apple" }, new Item { Category = "Fruit", Name = "Banana" }, new Item { Category = "Vegetable", Name = "Carrot" } }; // 使用 Lambda 进行分组 var groupedItems = items.GroupBy(item => item.Category); foreach (var group in groupedItems) { Console.WriteLine($"Category: {group.Key}"); foreach (var item in group) { Console.WriteLine($"\t{item.Name}"); } } ``` 上述代码展示了如何基于类别属性对列表项进行分组[^1]。 而在 Python 中,则可采用不同的策略。虽然标准库不直接提供像 .NET 那样的内置 `GroupBy` 函数支持传递 `lambda` 参数,但是可以借助第三方库如 Pandas 或者通过组合内建函数来达到相同效果。这里给出一个简单的例子,它模仿了 SQL 的 GROUP BY 功能并计算每种水果的数量: ```python from collections import defaultdict fruits = ['apple', 'banana', 'orange', 'apple', 'pear', 'banana'] fruit_counts = defaultdict(int) for fruit in fruits: fruit_counts[fruit] += 1 # 将字典转换成元组列表以便打印输出 result = [(k, v) for k, v in fruit_counts.items()] print(result) ``` 如果确实想要模拟带有 `lambda` 的行为,那么可以这样做: ```python import itertools from operator import itemgetter data = [ {"category": "fruit", "name": "apple"}, {"category": "vegetable", "name": "carrot"}, {"category": "fruit", "name": "banana"} ] sorted_data = sorted(data, key=itemgetter('category')) # 排序是为了让相同的key相邻 groups = [] for _, group in itertools.groupby(sorted_data, key=lambda x:x['category']): groups.append(list(group)) for g in groups: print(g) ``` 这段代码先按分类字段排序再做分组处理,并且利用了 `lambda` 来指定分组依据[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

王焜棟琦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值