#vb.net #winforms #linq
#vb.net #winforms #linq
Вопрос:
Я хотел бы преобразовать 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?
Комментарии:
1. Вы пробовали что-нибудь до сих пор? Было бы лучше, если бы вы могли сначала показать свою работу, чтобы сообщество могло помочь.
Ответ №1:
Я не знаю, какой у вашей переменной grdCNCFilesRad
тип, но я предполагаю, что это нет.Тип NET. Но когда я читаю ChildRows
, я могу быть уверен, что это какое-то перечисление (где-то в дереве наследования должен быть интерфейс IEnumerable
).
Таким образом, вы можете включить System.Linq
и применить a AsQueryable()
по своему ChildRows
усмотрению.
Остальное — это всего лишь небольшая часть Linq (Select, Where, ToList()). Вот и все!
Редактировать: первая часть должна быть решена следующим образом:
Dim childList =
Me.grdCNCFilesRad.ChildRows
.AsQueryble()
.Select(Function(row) row.Cells(e.Column.Index).Value)
.Distinct()
Комментарии:
1. Затемните newPopup как новый RadListFilterPopup (например, столбец) для каждого элемента как System. Коллекции. ArrayList в ePopup.MenuTreeElement. DistinctListValues . Значения, если не дочерний список. Содержит (элемент (0)) Затем newPopup.MenuTreeElement . DistinctListValues . Удалить (элемент (0). toString()) Завершается, если следующий
Ответ №2:
Нет необходимости в преобразовании ForEach
, Linq
если у вас проблемы с производительностью.
Ваш существующий foreach
код выглядит хорошо.
Примечание: не думайте Linq
, что это лучше по сравнению for-each
с производительностью.