如何在从Linq到Datasets的选择过程中使用If语句

时间:2009-12-14 18:50:57

标签: vb.net linq linq-to-entities linq-to-objects

我有这个LINQ语句

Dim Demo = From d In DBDataTable.AsEnumerable _                 
     Select id = d.Field(Of Integer)("id"), _
            Column = d.Field(Of Object)  (_column2), _
            Col3 = d.Field(Of Object)(_column3), _
            Col4 = IIf(_Col4 <> -1, d.Field(Of Object)(_Col4), Nothing)

如果/ iif在select中,我有什么方法可以使用吗?

1 个答案:

答案 0 :(得分:7)

[这是问题评论中讨论的摘要。]

由于IIf始终评估 true false 部分,因此您的代码无效。因此,评估d.Field(Of Object)(_Col4)会引发_Col4 = -1的异常。

相反,使用If(condition, true, false),它就像C#的condition ? true : false运算符一样,只评估 true false 部分,具体取决于< EM>条件。所以,你的代码应该是:

Dim Demo = From d In DBDataTable.AsEnumerable _
           Select id = d.Field(Of Integer)("id"), _
                  Col2 = d.Field(Of Object)(_column2), _
                  Col3 = d.Field(Of Object)(_column3), _
                  Col4 = If(_Col4 <> -1, d.Field(Of Object)(_Col4), Nothing)