2009-06-26 82 views
0

我遇到了DataTable行的問題,想法是我想從一系列行中抽出其中一個列值位於集合中的任何行的指導。但是,我得到了select()函數的guid/string比較錯誤。DataTable.Select(「ColumnName IN」)Guid error

的代碼如下:

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和字符串比較的誤差。考慮到這一點,有什麼辦法可以解決這個問題?

回答

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;