2013-04-23 100 views
0

我想改变Where子句将应用在哪个字段取决于函数接收的布尔值。到目前为止,我有这样的:LINQ 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

这是因为操作数二,三至IF函数必须有相同的类型,或者可以隐式转换,以便它们可以自动转换。在这种情况下,操作数正在转换为整数,并且value不包含用于转换的有效值。更改您的代码以明确比较字符串应该解决这个问题:

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

参见this answer的意见进一步阅读。

+0

感谢它工作:) – jplanglais 2013-04-23 14:34:56