有什么办法可以在数据表的表达式中包含3个条件?

时间:2018-11-05 09:30:46

标签: asp.net vb.net

我有一个数据表,并为bit数据类型列添加了表达式。因此,如果从DB获得0,则将其替换为“ False”,对于1,我将其替换为“ True”。现在我的问题是,该字段也包含NULL。我已经使用了IIF,所以我的支票就像:

Dim expression As String = String.Format("IIF({0}=0, {1}, {2})", colName, Boolean.FalseString, Boolean.TrueString)

因此,对于NULL,将其替换为True字符串,有什么方法可以处理NULL并将其替换为“”或空白

2 个答案:

答案 0 :(得分:1)

Dim expression As String = String.Format("IIF({0}=0, {1}, IIF({0}=1, {2}, ''))",
                                         colName,
                                         Boolean.FalseString,
                                         Boolean.TrueString)

答案 1 :(得分:0)

将结果投射为可为空的Boolean并调用.ToString()

var result = table.Field(Of Boolean?)("columnName").ToString()

从那里Boolean.ToString Method

  

将此实例的值转换为其等效的字符串   表示形式(“ True”或“ False”)。

如果值为DbNull可为Boolean可为空,则将没有值,并且将返回空字符串。

从那里Nullable.ToString Method

  

当前Nullable对象的值的文本表示形式   如果HasValue属性为true,则为空字符串(“”),如果   HasValue属性为false。

示例

Dim table As New DataTable()
table.Columns.Add("IsTest", GetType(Boolean))

Dim row0 = table.NewRow()
row0.SetField("IsTest", True)
table.Rows.Add(row0)

Dim row1 = table.NewRow()
row1.SetField("IsTest", DBNull.Value)
table.Rows.Add(row1)

Dim actual = table.AsEnumerable().
                   Select(Function(row) row.Field(Of Boolean?)("test")).
                   Select(Function(value) value.ToString()).
                   ToList()

Dim expected As New List(Of String) From { "True", "" }

actual.Should().BeEquivalentTo(expected) ' Pass

如果您不在乎列的实际类型,则可以简单地调用ToString()来完成此操作。

row("IsTest").ToString()

如果在某些控件中显示数据,则可能不需要执行任何操作,因为在大多数情况下,默认情况下会调用.ToString()