【问题标题】:DataTable.Select("ColumnName IN ") Guid errorDataTable.Select("ColumnName IN") Guid 错误
【发布时间】:2009-06-26 22:20:19
【问题描述】:

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

【问题讨论】:

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


    【解决方案1】:

    如果您可以使用 .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;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-27
      • 1970-01-01
      • 1970-01-01
      • 2010-10-06
      相关资源
      最近更新 更多