Я создаю простой инструмент поиска в приложении Windows vb.net формы с базой данных сервера SQL, пользователь введет уникальный идентификатор и увидит результаты, которые показывают состояние.
Класс объекта:
Public Class IStatus
Public Property Id As String
Public Property Status As String
Public Sub New(ByVal Id As String, ByVal Status As String)
Id = Id
Status = Status
End Sub
End Class
Что я делаю, так это заполняю строки из базы данных в List (Of IStatus). Теперь я хочу отфильтровать строки, используя linq из таблицы данных, поэтому я сделал следующее:
Public Function GetDS() As List(Of IStatus)
Dim sRows As New List(Of IStatus)
Dim dr As SqlDataReader = GetDataReader()
If dr.HasRows Then
Using dt As New DataTable
dt.Load(dr)
totRows = dt.Rows.Count
If (totRows > 1) Then
For Each drow As DataRow In dt.Rows
Dim sRow As New IStatus(drow(0).ToString(), drow(1).ToString())
sRows.Add(sRow)
Next
'Trying to filter the data with linq conditions here ...
Dim uniqRows = sRows.Where(Function(p) p.Status = "Open" Or p.Status = "Closed" Or p.Status = "Unknown").ToList
sRows = uniqRows.ToList
Else
Dim sRow As New IStatus(dt.Rows(0)(0).ToString, dt.Rows(0)(1).ToString)
sRows.Add(sRow)
End If
Return sRows
End Using
End If
End Function
У меня есть список следующего объекта:
IStatus
-----------
Id
Status
Ниже приведены примерные данные и фильтрация, к которой я стремлюсь:
Например, данные:
-----------------
Id Status
-----------------
1 Open
1 Open
1 Closed
Возвращать все строки, поскольку одно из значений статуса отличается.
Id Status
-----------------
1 Open
1 Open
1 Open
Возвращает только первую строку, так как все значения состояния одинаковы.
Id Status
-----------------
1 Unknown
1 Open
1 Open
Возвращает строку Неизвестно, если какой-либо из статусов Неизвестен.
Спасибо.