我有List(of T)
其中T
有一个属性是一个复选框列表,我需要的是一个Lambda表达式,它将计算列表中所有选中的复选框。
我尝试过:
Me.list.Sum(Function(objT) objT.CheckBoxes.Where(Function(chk) chk.Checked).Count)
但它并没有成功。有什么建议吗?
答案 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。对不起所有其他答案,我确实已经全部阅读了所以不是浪费时间的人;)