Как использовать оператор If во время выбора из Linq в наборы данных - PullRequest
4 голосов
/ 14 декабря 2009

У меня есть этот оператор 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)

Можно ли как-нибудь использовать if / iif внутри select?

1 Ответ

7 голосов
/ 14 декабря 2009

[Это краткое изложение обсуждения в комментариях к вопросу.]

Ваш код не будет работать, поскольку IIf всегда оценивает обе части: true и false . Таким образом, оценка d.Field(Of Object)(_Col4) вызовет исключение, если _Col4 = -1.

Вместо этого используйте If(condition, true, false), который работает как оператор C # 1015 * и оценивает только часть true или false , в зависимости от условия , Итак, ваш код должен выглядеть так:

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)
...