如何让Linq忽略任何空的参数?所以姓氏,名字等?如果我在所有参数中都有数据,那就可以了......
refinedresult = From x In theresult _
Where x.<thelastname>.Value.TestPhoneElement(LastName) And _
x.<thefirstname>.Value.TestPhoneElement(FirstName) And _
x.<id>.Value.TestPhoneElement(Id) And _
x.<number>.Value.TestPhoneElement(Telephone) And _
x.<location>.Value.TestPhoneElement(Location) And _
x.<building>.Value.TestPhoneElement(building) And _
x.<department>.Value.TestPhoneElement(Department) _
Select x
Public Function TestPhoneElement(ByVal parent As String, ByVal value2compare As String) As Boolean
'find out if a value is null, if not then compare the passed value to see if it starts with
Dim ret As Boolean = False
If String.IsNullOrEmpty(parent) Then
Return False
End If
If String.IsNullOrEmpty(value2compare) Then
Return ret
Else
ret = parent.ToLower.StartsWith(value2compare.ToLower.Trim)
End If
Return ret
End Function
答案 0 :(得分:1)
只是为了确保我理解你想要的东西:你想要一个IEnumerable的XElements x返回,其中至少有一个子元素的值与相应的字符串变量匹配。因此, ignore 表示您的扩展方法将返回 false 。所以我推断如果它不能正常工作,那么一个空参数会导致True(错误地)返回TestPhoneElement,因此会得到误报。意思是,如果一个参数是一个空格或者什么都没有,它总是返回true,因此你得到的结果中的项目是你不应该得到的。
我的想法是:
ret = parent.ToLower.StartsWith(value2compare.ToLower.Trim)
可能会返回true。value2compare.ToLower.Trim()
肯定会导致您指出的问题。String.IsNullOrEmpty(value2compare)
必须返回false。我相信你传入TestPhoneElement
的第二个参数实际上必须是一个至少包含一个空格的字符串。这样,{ {1}}返回false。然后在最后一行String.IsNullOrEmpty(value2compare)
评估为空字符串,因为你修剪它,value2compare.ToLower.Trim
评估为 true ,因为每个字符串以开头为空字符串。
因此,在第一次进入时修剪value2compare,或者将第二个条件更改为:
ret = parent.ToLower.StartsWith(value2compare.ToLower.Trim)
你应该好。
你想要一个空字符串传递给extension方法导致True然后,对吗?此外,我更新了扩展方法,以允许稍微更清晰的代码。关键是你要传入任何空白字符串以返回True:
If String.IsNullOrEmpty(value2compare.trim()) Then
和
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