Vb.net 使用Lambda表达式求和计数

Vb.net 使用Lambda表达式求和计数,vb.net,lambda,Vb.net,Lambda,我有一个List(of T)其中T有一个属性,它是一个复选框列表,我需要的是一个Lambda表达式,它将计算列表中所有选中的复选框 我试过: Me.list.Sum(Function(objT) objT.CheckBoxes.Where(Function(chk) chk.Checked).Count) 但这并没有奏效。有什么建议吗 Dim b As New List(Of Boolean) b.AddRange({True, False, True}) Dim n = b.Sum(Func

我有一个
List(of T)
其中
T
有一个属性,它是一个复选框列表,我需要的是一个Lambda表达式,它将计算列表中所有选中的复选框

我试过:

Me.list.Sum(Function(objT) objT.CheckBoxes.Where(Function(chk) chk.Checked).Count)
但这并没有奏效。有什么建议吗

Dim b As New List(Of Boolean)
b.AddRange({True, False, True})
Dim n = b.Sum(Function(x)
                  Return If(x, 1, 0)
              End Function)

n
现在包含2个。

无论如何,您必须告诉VB
T
有一个属性
复选框。因此,定义添加到列表中的类型必须实现的接口

Public Interface ICheckBoxes
    ReadOnly Property CheckBoxes() As List(Of CheckBox)
End Interface

Public Class ClassWithCkeckBoxes
    Implements ICheckBoxes

    Private m_CheckBoxes As List(Of CheckBox) = New List(Of CheckBox)

    Public ReadOnly Property CheckBoxes() As List(Of CheckBox) Implements ICheckBoxes.CheckBoxes
        Get
            Return m_CheckBoxes
        End Get
    End Property
End Class
指定
T
必须使用类型参数
实现
ICheckBoxes
(T作为ICheckBoxes)


SelectMany
。也就是说,它将复选框列表转换为简单的复选框列表。

您需要使用SelectMany。像这样的东西可能有用

Dim count = (From box In objtCheckBoxes Where box.Checked Select box).Count()
Me.list.SelectMany(Function(objT) objT.Checkboxes)
       .Count(Function(chk) chk.Checked)

最后,填充列表时出现问题,该列表转换为始终为0的答案。修复填充列表的方法给了我正确的答案,这意味着lambda表达式本身一直都是正确的


p.S.为所有其他答案感到抱歉,我确实都读了,所以这不是浪费时间;)

“这没用”这是什么意思?错误消息或错误结果?错误消息/结果是什么?我总是得到0,但是。。。现在我修复了它,问题是列表而不是lambda。我如何结束并放弃这个问题?(最后lambda表达式正常工作)这就是我所想的。。。我为什么问这个问题。你不能放弃这个问题,你能做的就是回答你自己的问题并接受它。。为所有其他的答案感到抱歉,我都读了,所以这不是浪费时间;)
Me.list.SelectMany(Function(objT) objT.Checkboxes)
       .Count(Function(chk) chk.Checked)