我有一个函数,并且希望能够使用参数更改相等性检查,以便对于一个版本,我提取所有等于x的项,而对于另一个版本,所有不等于x的项。
这是我的功能:
Public Function GetAllItemsByUserName(ByVal userName As String) As List(Of MyRecords)
Dim itemsQuery = From myRecord as MyRecord from _ListOfRecords
Where myRecord.Name = userName
Select myRecord
Return itemsQuery.ToList
End Function
所以我想只使用一个参数来翻转相等,这样我就可以提取所有= username的记录,或者所有那些!= username。有没有办法在不编写函数的两个版本的情况下这样做?
答案 0 :(得分:1)
使用Xor(Exclusive Or)运算符。
Public Function GetAllItemsByUserName(ByVal userName As String, ByVal exclude As Boolean) As List(Of MyRecords)
Dim itemsQuery = From myRecord as MyRecord from _ListOfRecords
Where (myRecord.Name = userName) Xor exclude
Select myRecord
Return itemsQuery.ToList
End Function
答案 1 :(得分:1)
试试这个:
Public Function GetAllItemsByUserName(ByVal userName As String, ByVal equal as Boolean) As List(Of MyRecords)
Dim itemsQuery = From myRecord as MyRecord from _ListOfRecords
Where (myRecord.Name = userName) = equal
Select myRecord
Return itemsQuery.ToList
End Function
答案 2 :(得分:1)
您还可以使用Where
中的If
(conditional) operator:
Public Function GetAllItemsByUserName(ByVal userName As String, equals As Boolean) As List(Of MyRecords)
Dim itemsQuery =
From myRecord In _ListOfRecords
Where If(equals, myRecord.Name = userName, myRecord.Name <> userName)
Select myRecord
Return itemsQuery.ToList
End Function
答案 3 :(得分:1)
这可以实现另一种方式:
Public Function GetAllItemsByUserName(ByVal userName As String, equals As Boolean) As List(Of MyRecords)
Dim itemsQuery = From myRecord as MyRecord from _ListOfRecords
Where (equals && myRecord.Name = userName) Or (!equals && myRecord.Name != userName)
Select myRecord
Return itemsQuery.ToList
End Function