我遇到了DataTable系列的问题,我的想法是我想从一系列行中拉出一行,其中一列值在一组guid中。但是,我从select()函数中得到一个guid / string比较错误。
代码如下:
Dim sb As New StringBuilder
For Each Row As DataRow In dtData.Rows
sb.Append("'")
sb.Append(Row("SomeField").ToString)
sb.Append("', ")
Next
gvDataView.DataSource = dtSubData.Select("SomeField IN (" & sb.ToString.TrimEnd(", ".ToCharArray) & ")")
但是,由于SomeField是uniqueidentifier列,因此dtSubData.select会抛出有关Guid和String Comparison的错误。考虑到这一点,我有什么方法可以解决这个问题吗?
答案 0 :(得分:0)
如果您可以使用.NET 3.5和System.Data.DataSetExtensions.dll,则可以在此处利用LINQ。首先,我使用dtData中的值填充HashSet。
var items = from row in dtData.AsEnumerable()
select row.Field<Guid>("SomeField");
var validValues = new HashSet<Guid>(items);
为C#道歉,但我的VB LINQ语法有点不稳定。无论如何,一旦你有一个有效id的HashSet,你就可以有效地测试你的第二个DataTable中的数据是否包含在该集合中:
gvDataView.DataSource = from row in dtSubData.AsEnumerable()
where validValues.Contains(row.Field<Guid>("SomeField"))
select row;