Просто чтобы убедиться, что я понимаю, что вы хотите: вы хотите, чтобы IEnumerable из XElements x возвращал, где хотя бы одно из значений дочерних элементов соответствует соответствующей строковой переменной. Таким образом, ignore означает, что ваш метод расширения вернет false . Поэтому я делаю вывод, что если он не работает нормально, то пустой параметр приводит к тому, что TestPhoneElement (по ошибке) возвращает true, и, следовательно, вы получаете ложные срабатывания. Это означает, что, если параметр является пустой строкой или ничем, он всегда возвращает true, и, следовательно, вы получаете элементы в своем результате, которые вы не должны получать.
Я думаю так:
- Только
ret = parent.ToLower.StartsWith(value2compare.ToLower.Trim)
может вернуть true.
value2compare.ToLower.Trim()
наверняка вызовет указанную вами проблему.
String.IsNullOrEmpty(value2compare)
должен возвращать false.
Я считаю, что второй параметр, который вы передаете в TestPhoneElement
, на самом деле должен быть строкой, содержащей хотя бы один пробел . Таким образом, String.IsNullOrEmpty(value2compare)
возвращает false , Затем в последней строке value2compare.ToLower.Trim
оценивается как пустая строка, потому что вы обрезали ее, а ret = parent.ToLower.StartsWith(value2compare.ToLower.Trim)
оценивается как true , потому что каждая строка начинается с пустой строки.
Таким образом, значение триммера2 сравните, когда оно впервые появится, или измените второе значение на:
If String.IsNullOrEmpty(value2compare.trim()) Then
и тебе должно быть хорошо.
Edit:
решение на основе проясненной ситуации
Вы хотите, чтобы пустая строка, переданная в метод расширения, приводила к True тогда, верно? Кроме того, я обновил метод расширения, чтобы учесть немного более чистый код. Ключевым моментом является то, что вы хотите, чтобы любая пустая передаваемая строка приводила к возвращению True:
refinedresult = From x In theresult _
Where x.<thelastname>.MatchesOrIsBlank(LastName) And _
x.<thefirstname>.MatchesOrIsBlank(FirstName) And _
x.<id>.MatchesOrIsBlank(Id) And _
x.<number>.MatchesOrIsBlank(Telephone) And _
x.<location>.MatchesOrIsBlank(Location) And _
x.<building>.MatchesOrIsBlank(Building) And _
x.<department>.MatchesOrIsBlank(Department) _
Select x
И
Public Function TestPhoneElement(ByVal xE As XElement, ByVal value2compare As String) As Boolean
Return xE.Value.ToLower.StartsWith(value2compare.ToLower.Trim)
End Function