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;
Другие вопросы по тегам