DataTable.Select ("ColumnName IN") Ошибка Guid - PullRequest
0 голосов
/ 27 июня 2009

У меня проблемы со строкой 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 Ответ

0 голосов
/ 27 июня 2009

Если вы можете использовать .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;
...