DataTable.Select("ColumnName IN ") Ошибка Guid
У меня проблемы со строкой DataTable, идея в том, что я хочу вытащить из ряда строк любые строки, где одно из значений столбца находится в наборе направляющих. Тем не менее, я получаю ошибку сравнения guid / string из функции select().
Код выглядит следующим образом:
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 и String. Имея это в виду, есть ли способ обойти эту проблему?
1 ответ
Если вы можете использовать.NET 3.5 и System.Data.DataSetExtensions.dll, вы можете воспользоваться LINQ здесь. Во-первых, я бы заполнил HashSet значениями из dtData.
var items = from row in dtData.AsEnumerable()
select row.Field<Guid>("SomeField");
var validValues = new HashSet<Guid>(items);
Извиняюсь за C#, но мой синтаксис VB LINQ немного шаткий. В любом случае, когда у вас есть HashSet из действительных идентификаторов, вы можете эффективно проверить, содержатся ли данные из вашего второго DataTable в этом наборе:
gvDataView.DataSource = from row in dtSubData.AsEnumerable()
where validValues.Contains(row.Field<Guid>("SomeField"))
select row;