LINQ where子句有不同的字段

时间:2013-04-23 14:12:41

标签: vb.net linq where

我正在尝试根据函数接收的布尔值来更改将应用​​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库,但如果可能,我宁愿不使用任何外部组件..

1 个答案:

答案 0 :(得分:1)

这是因为IF函数的操作数2和3必须具有相同的类型,或者可以隐式转换,以便它们可以自动转换。在这种情况下,操作数将转换为整数,value不包含转换的有效值。更改代码以显式比较字符串应解决问题:

If(bValueIsString, t.Desc=value, t.Id.ToString()=value)

请参阅this answer上的评论以供进一步阅读。