代码之家  ›  专栏  ›  技术社区  ›  Sukasa

dataTable.select(“columnname in”)guid错误

  •  0
  • Sukasa  · 技术社区  · 16 年前

    我在数据表行上遇到了问题,我的想法是从一系列行中提取列值之一位于一组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是唯一标识符列,dtsubdata.select将引发有关guid和字符串比较的错误。考虑到这一点,我有什么办法可以解决这个问题吗?

    1 回复  |  直到 16 年前
        1
  •  0
  •   Joel Mueller    16 年前

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

    抱歉,我的vb linq语法有点不稳定。总之,一旦您有了有效ID的哈希集,您就可以有效地测试第二个数据表中的数据是否包含在该集中:

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