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

Lea*_*ner 4 linq vb.net linq-to-objects linq-to-entities

我有这个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)
Run Code Online (Sandbox Code Playgroud)

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

Hei*_*nzi 7

[这是对问题评论中讨论的总结.]

您的代码将不起作用,因为IIf始终评估truefalse部分.因此,评估d.Field(Of Object)(_Col4)将引发异常,如果_Col4 = -1.

相反,use If(condition, true, false),就像C#的condition ? true : false运算符一样,只根据条件计算truefalse部分.所以,你的代码应该是:

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)
Run Code Online (Sandbox Code Playgroud)