Asp.net DataTable.Select(“ColumnName IN”)Guid错误

Asp.net DataTable.Select(“ColumnName IN”)Guid错误,asp.net,string,datatable,guid,datatable.select,Asp.net,String,Datatable,Guid,Datatable.select,我在使用DataTable行时遇到了问题,我的想法是,我想从一系列行中拉出任何列值位于一组GUID中的行。但是,我从select函数中得到一个guid/字符串比较错误 代码如下: Dim sb As New StringBuilder For Each Row As DataRow In dtData.Rows sb.Append("'") sb.Append(Row("SomeField").ToString) sb.Append("', ") Next gvDat

我在使用DataTable行时遇到了问题,我的想法是,我想从一系列行中拉出任何列值位于一组GUID中的行。但是,我从select函数中得到一个guid/字符串比较错误

代码如下:

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和字符串比较的错误。考虑到这一点,有什么方法可以解决这个问题吗?

如果您可以使用.NET 3.5和System.Data.DataSetExtensions.dll,您可能可以在这里利用LINQ。首先,我将用dtData中的值填充哈希集

var items = from row in dtData.AsEnumerable()
            select row.Field<Guid>("SomeField");
var validValues = new HashSet<Guid>(items);
很抱歉使用C语言,但是我的VB LINQ语法有点不稳定。无论如何,一旦您有了一个有效id的哈希集,您就可以有效地测试第二个DataTable中的数据是否包含在该集中:

gvDataView.DataSource = from row in dtSubData.AsEnumerable()
                        where validValues.Contains(row.Field<Guid>("SomeField"))
                        select row;