我的数据表值包含列cell_1和cell_2。
我想检查数据表中是否已存在该值。我尝试过使用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,但我不太明白。
答案 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都是字符串。