VB.NET中如何从List(Of T)按子集合指定属性值筛选匹配对象
VB.NET 嵌套集合Linq筛选正确实现
原写法问题排查
- 第一种写法错误原因:
Where运算符要求条件表达式返回布尔值,但你内层嵌套的y.Results.Where(...)返回的是符合条件的Results对象集合,而非布尔判断结果,语法校验无法通过。 - 第二种写法逻辑本身正确,报错大概率源于两个问题:
- 变量类型不匹配:
Tests是List(Of Test)类型,但你声明的接收变量是LimsTest,类型不一致导致赋值失败 - 值匹配规则问题:
Results.Value的属性类型和ary(1)的类型不匹配,或Name的字符串匹配存在大小写、空格不符的情况
- 变量类型不匹配:
正确实现代码
' 提前转换目标值类型,避免隐式转换导致的匹配失败,可根据Value的实际类型调整转换逻辑 Dim targetValue As Object = ary(1) ' 写法1:仅取第一个匹配的Test对象,无匹配时返回Nothing Dim aTest As Test = Tests.FirstOrDefault(Function(y) Return y.Results.Any(Function(z) ' 字符串对比增加忽略大小写参数,避免大小写导致匹配失效,不需要可删除 Return z.Name.Equals("Test Temperature", StringComparison.OrdinalIgnoreCase) AndAlso z.Value.Equals(targetValue) End Function) End Function)
扩展用法
如果需要筛选所有符合条件的Test对象而非仅取第一个,调整写法如下:
Dim matchedTests As List(Of Test) = Tests.Where(Function(y) Return y.Results.Any(Function(z) z.Name = "Test Temperature" AndAlso z.Value = ary(1)) End Function).ToList()
内容的提问来源于stack exchange,提问作者ScottinTexas
相关产品推荐
相关产品推荐

