我想将ForEach转换为LINQ。目前我正在使用这两部分
If TypeOf e.FilterPopup Is RadListFilterPopup Then
Dim ePopup As RadListFilterPopup = DirectCast(e.FilterPopup, RadListFilterPopup)
Dim childList As New List(Of Object)()
For Each row As GridViewRowInfo In Me.grdCNCFilesRad.ChildRows
Dim value = row.Cells(e.Column.Index).Value
If Not childList.Contains(value) Then
childList.Add(value)
End If
Next
Dim newPopup As New RadListFilterPopup(e.Column)
For Each item As System.Collections.ArrayList In ePopup.MenuTreeElement.DistinctListValues.Values
If Not childList.Contains(item(0)) Then
newPopup.MenuTreeElement.DistinctListValues.Remove(item(0).ToString())
End If
Next
e.FilterPopup = newPopup
End If
如何使用LINQ查询执行相同的操作?
答案 0 :(得分:0)
我不知道你的变量grdCNCFilesRad
的类型是什么,但我认为它不是.NET类型。但是当我阅读ChildRows
时,我可以确定这是某种枚举(在其中的某个地方,继承树必须是接口IEnumerable
)。
因此,您可以在System.Linq
添加AsQueryable()
并应用ChildRows
。
剩下的只是Linq(Select,Where,ToList())的一小部分。那就是它!
编辑: 第一部分应该由此解决:
Dim childList =
Me.grdCNCFilesRad.ChildRows
.AsQueryble()
.Select(Function(row) row.Cells(e.Column.Index).Value)
.Distinct()
答案 1 :(得分:0)
如果您遇到性能问题,则无需将ForEach
转换为Linq
。
您现有的foreach
代码看起来不错。
注意:在性能方面,Linq
与for-each
相比并不是更好。