У меня есть класс с именем Person
, который обладает свойствами FirstName
, LastName
и MiddleName
и у меня есть форма для всей SortedDictionary (Of Integer, Person) называется oPeople
.LINQ SqlMethods.Like (и .Contains) не
, я вызываю метод, который загружает список из 65 человек. Сейчас это жестко закодировано, но в конечном итоге я буду захватывать его из базы данных.
После загрузки формы, у меня есть TextBox
под названием txtSearchForName
для пользователя, чтобы ввести слово для поиска и имеют система просматривать oPeople
фильтрации на LastName
для полного или частичного совпадения (случай нечувствительным).
В конце концов, я хотел бы иметь возможность искать сравнения между FirstName, LastName и MiddleName (если таковой имеется).
На этом этапе все, что я хочу сделать, это просмотреть результаты запроса LINQ и вывести их в окно консоли.
Вот Person
класс:
Public Class Person
Private _fnm As String = String.Empty
Public Property FirstName() As String
Get
Return _fnm
End Get
Set(ByVal value As String)
_fnm = value.Trim
End Set
End Property
Private _lnm As String = String.Empty
Public Property LastName() As String
Get
Return _lnm
End Get
Set(ByVal value As String)
_lnm = value.Trim
End Set
End Property
Private _mnm As String = String.Empty
Public Property MiddleName() As String
Get
Return _mnm
End Get
Set(ByVal value As String)
_mnm = value.Trim
End Set
End Property
Public Sub New()
End Sub
Public Sub New(ByVal firstName As String,
ByVal lastName As String,
Optional ByVal middleName As String = "")
_fnm = firstName
_lnm = lastName
_mnm = middleName
End Sub
End Class
Это метод я использую, чтобы добавить людей. Я добавляю 65 человек, но сократили код вниз:
Private Sub FillPeopleDictionary()
Try
If oPeople.Count > 0 Then oPeople.Clear()
Dim oNewPerson As Person = Nothing
oNewPerson = New Person("Scarlett", "Johansson")
oPeople.Add(1, oNewPerson)
oNewPerson = New Person("Amy", "Adams")
oPeople.Add(2, oNewPerson)
oNewPerson = New Person("Jessica", "Biel")
oPeople.Add(3, oNewPerson)
Catch ex As Exception
MessageBox.Show(ex.Message, "Error [FillPeopleDictionary]", MessageBoxButtons.OK, MessageBoxIcon.Error)
End Try
End Sub
Это мое заявление LINQ с последующим выходом на консоли, которая вызывается, когда пользователь нажимает на кнопку:
Dim sSearchTerm As String = txtSearchForName.Text.Trim.ToLower
Dim queryResults = From person In oPeople
'Where SqlMethods.Like(person.Value.LastName.ToLower, "%" & sSearchTerm & "%")
'Where person.Value.LastName.ToLower.Contains("%" & sSearchTerm & "%")
Console.WriteLine("search term: " & sSearchTerm &
Environment.NewLine & Environment.NewLine &
"queryResults.Count: " & queryResults.Count.ToString &
Environment.NewLine)
For Each result In queryResults
If Not String.IsNullOrEmpty(result.Value.MiddleName) Then
Console.WriteLine(result.Key.ToString.PadLeft(2, "0") & ": " & result.Value.FirstName & " " & result.Value.MiddleName & " " & result.Value.LastName)
Else
Console.WriteLine(result.Key.ToString.PadLeft(2, "0") & ": " & result.Value.FirstName & " " & result.Value.LastName)
End If
Next
LINQ оператор работает так, как он есть, без каких-либо условий, поэтому он прокручивает и правильно перечисляет всех людей в коллекции oPeople
.
В начале описания queryResults
есть две статьи Where
. Это два способа, которые я пытался отфильтровать. Один из подходов состоял в том, чтобы использовать .Contains
, а другой должен был использовать .Like
, однако ни один из них не работает.
Если пользователь должен был ввести «Мар», я надеюсь получить обратно список из 6 человек из списка 65 (чувствительно к регистру):
Meghan Markle
Марго Робби
Кейт Мара
Уинстэд
Мариан Ривера
Эми Смарт
Теперь, конечно, это поиск по FirstName
и LastName
. Прямо сейчас я просто пытаюсь заставить LastName
работать. С только LastName
список будет только:
Meghan Markle
Кейт Мара
Эми Смарт
Может кто-нибудь увидеть, что я делаю неправильно здесь?Или я должен отказаться от идеи использования LINQ с SortedDictionary?
Почему вы используете 'SqlMethods' на общей обычной NET коллекции? Кроме того, спасибо за публикацию 130 * двойных интервалов * строк, показывающих, как вы добавили 60 некоторых людей. Большинство из нас получили идею после 2 или 3. см. [MCVE] – Plutonix
Plutonix. Я использую SQLMethods только потому, что просто пытаюсь понять, как работает LINQ. Это моя первая попытка использовать его, поэтому я подумал, что лучше всего начать с чего-то, что мне комфортно (SortedDictionaries). Jinx88909 показал мне, что List (Of T) - лучший подход. –
'SqlMethods' для Linq to SQL. вам не нужно его узнать о linq или методах расширения, как в ответах – Plutonix