使用Lambda表达式对计数求和

时间:2012-02-03 19:11:43

标签: vb.net lambda

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

我尝试过:

Me.list.Sum(Function(objT) objT.CheckBoxes.Where(Function(chk) chk.Checked).Count)

但它并没有成功。有什么建议吗?

5 个答案:

答案 0 :(得分:1)

Dim count = (From box In objtCheckBoxes Where box.Checked Select box).Count()

答案 1 :(得分:0)

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。

答案 2 :(得分:0)

不知何故,你必须告诉VB T有一个属性CheckBoxes。因此,定义一个接口,您添加到列表中的类型必须实现

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实现(Of T As ICheckBoxes)

Class CountCheckBoxes(Of T As ICheckBoxes)
    Public Sub Test(ByVal list As List(Of T))
        Dim count As Integer = list _
            .SelectMany(Function(t) t.CheckBoxes) _
            .Count(Function(checkBox) checkBox.Checked)
    End Sub
End Class

SelectMany使列表变得扁平化。即,它将复选框列表的列表转换为一个简单的复选框列表。

答案 3 :(得分:0)

您需要使用SelectMany。这样的事情可能有用。

Me.list.SelectMany(Function(objT) objT.Checkboxes)
       .Count(Function(chk) chk.Checked)

答案 4 :(得分:0)

最后填写列表时出现问题,该列表在始终为0 答案中翻译。修复填充列表的方法给了我正确的答案,这意味着lambda表达式本身就是正确的。

P.S。对不起所有其他答案,我确实已经全部阅读了所以不是浪费时间的人;)