检查数据表中的值

时间:2017-07-25 02:26:37

标签: vb.net linq datatable

我的数据表值包含列cell_1和cell_2。

enter image description here

我想检查数据表中是否已存在该值。我尝试过使用dt.contain("textbox1.text"),但这是错误的,因为在这个数据表中没有主键。我也试过使用像这样string x = dt_aa.select("cell_1 = textbox1.text")的数据过滤器。

效果很好,但是当我尝试输入在cell_1列中没有值的texbox1.text时。它给了我一个错误,因为它不存在。我最后的方法是使用它:

For Each dw As DataRow In dt_aa.Rows
    If dw("cell_1").ToString() = textbox1.text Then
        XtraMessageBox.Show("Cell_1 already exist !", "", MessageBoxButtons.OK, MessageBoxIcon.Warning)
        Exit For
    End If

    If dw("cell_2").ToString() = textbox2.text Then
        XtraMessageBox.Show("Cell_2 already exist !", "", MessageBoxButtons.OK, MessageBoxIcon.Warning)
        Exit For
    End If
Next

有没有简化它?因为我需要检查至少4列具有特定值的列。我担心循环需要一段时间来处理(CMIIW)。我试图使用LINQ,但我不太明白。

1 个答案:

答案 0 :(得分:2)

如果要检查数据集合是否具有特定值,可以在Linq中使用Any()方法。

Linq方法语法(使用lambda表达式)

Dim foundCell_1 = dt_aa.AsEnumerable.Any(Function (x) x.Field(Of String)("cell_1") = textBox1.Text)
If foundCell_1 Then
    XtraMessageBox.Show("Cell_1 already exist !", "", MessageBoxButtons.OK, MessageBoxIcon.Warning)
End If

If Not foundCell_1 Then
    Dim foundCell_2 = dt_aa.AsEnumerable.Any(Function(x) x.Field(Of String)("cell_2") = textBox2.Text)
    If foundCell_2 Then
        XtraMessageBox.Show("Cell_2 already exist !", "", MessageBoxButtons.OK, MessageBoxIcon.Warning)
    End If
End If

Linq查询语法

Dim foundCell_1 = (From rows In dt_aa.AsEnumerable
                  Where rows.Field(Of String)("cell_1") = textBox1.Text).Any
If foundCell_1 Then
    XtraMessageBox.Show("Cell_1 already exist !", "", MessageBoxButtons.OK, MessageBoxIcon.Warning)
End If

If Not foundCell_1 Then
    Dim foundCell_2 = (From rows In dt_aa.AsEnumerable
                      Where rows.Field(Of String)("cell_2") = textBox2.Text).Any
    If foundCell_2 Then
        XtraMessageBox.Show("Cell_2 already exist !", "", MessageBoxButtons.OK, MessageBoxIcon.Warning)
    End If
End If

如果您不想使用Linq,可以在Select()中使用DataTable方法。

Dim foundCell_1 = dt_aa.Select("cell_1 = '" & textBox1.Text & "'").Length > 0
If foundCell_1 Then
    XtraMessageBox.Show("Cell_1 already exist !", "", MessageBoxButtons.OK, MessageBoxIcon.Warning)
End If

If Not foundCell_1 Then
    Dim foundCell_2 = dt_aa.Select("cell_2 = '" & textBox2.Text & "'").Length > 0
    If foundCell_2 Then
        XtraMessageBox.Show("Cell_2 already exist !", "", MessageBoxButtons.OK, MessageBoxIcon.Warning)
    End If
End If

Linq Any()方法可能执行得更快,因为如果元素符合条件则返回true,因此它不需要检查所有数据。

注意:我假设cell_1和cell_2都是字符串。