DataTable.Select(“列名IN”)Guid错误

时间:2009-06-26 22:20:19

标签: asp.net string datatable guid datatable.select

我遇到了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的错误。考虑到这一点,我有什么方法可以解决这个问题吗?

1 个答案:

答案 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;