我正在尝试根据函数接收的布尔值来更改将应用Where子句的字段。到目前为止,我有这个:
Public Function SomeFunction(ByVal value As String, Optional bValueIsString As Boolean = False) As JsonResult
...
Dim q = (From t In table
Where If(bValueIsString, t.Desc=value, t.Id=value)
Select New With {.Id,
.LongDescription,
.Desc)})
...
End Function
但我一直在接受:
Conversion from string "someString" to type 'Integer' is not valid.
..当我将bValueIsString设置为true时。
-
我了解ScottGu的动态LINQ库,但如果可能,我宁愿不使用任何外部组件..
答案 0 :(得分:1)
这是因为IF函数的操作数2和3必须具有相同的类型,或者可以隐式转换,以便它们可以自动转换。在这种情况下,操作数将转换为整数,value
不包含转换的有效值。更改代码以显式比较字符串应解决问题:
If(bValueIsString, t.Desc=value, t.Id.ToString()=value)
请参阅this answer上的评论以供进一步阅读。