如何编写LINQ查询筛选同时存在两种错误的请求编号?
用LINQ筛选恰好包含两种不同错误的请求编号
嘿,我明白你想要的效果——从requestErrorList里找出那些恰好对应两种不同错误类型的请求编号(比如你说的1和6),用LINQ可以把你现在的循环逻辑简化成更简洁易读的代码,完全不用手动遍历啦!
直接上VB.NET的LINQ实现代码
Dim requestWithTwoErrors = requestErrorList .GroupBy(Function(item) item.requestNumber) ' 按请求编号分组 .Where(Function(group) ' 统计分组内不同错误的数量,排除重复的同一种错误 group.Select(Function(i) i.errorString).Distinct().Count() = 2 End Function) .Select(Function(group) group.Key) ' 提取符合条件的请求编号 .ToList() ' 转成List(Of String),和你原来的变量类型一致
代码逻辑解释
- GroupBy:把所有错误记录按请求编号归类,这样每个分组就是同一个请求下的所有错误条目
- Where筛选:对每个分组,先提取所有错误字符串并去重(
Distinct()),然后统计去重后的数量是否等于2——这一步确保我们找的是恰好两种不同错误,而不是错误条目数为2(避免同一种错误出现两次的情况) - Select提取:从符合条件的分组里取出请求编号(也就是分组的Key)
- ToList():转换成你需要的
List(Of String)类型,和你原来的变量requestWithMultipleErrors类型匹配
如果你要的是错误条目数为2(不管错误是否重复)
如果你的需求是错误条目总数为2(哪怕是同一种错误出现两次),那可以去掉Distinct(),改成:
Dim requestWithTwoErrorEntries = requestErrorList .GroupBy(Function(item) item.requestNumber) .Where(Function(group) group.Count() = 2) .Select(Function(group) group.Key) .ToList()
不过看你说的预期结果是1和6,应该是第一种「恰好两种不同错误」的场景~
内容的提问来源于stack exchange,提问作者Sandy
相关产品推荐
相关产品推荐

