0

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

4

1 回答 1

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;
于 2009-06-26T22:44:02.443 回答