Вопрос

Я пытаюсь создать свой treeview во время выполнения из DataTable, который возвращается из запроса LINQ.Возвращаемые поля следующие:

ИМЯ = Идентификатор дела | Дата контакта | Родительская заметка ТИП = Guid | Дата-время | Guid

Поле ParentNote соответствует записи в столбце CaseNoteID.Выбор (фильтр) выдает мне ошибку времени выполнения Не удается найти столбец [ea8428e4]. Этот буквенно-цифровой символ является первым разделом одного из идентификаторов Guid.Когда я прохожу через свой кодовый фильтр = "ParentNote=ea8428e4-1274-42e8-a31c-f57dc2f189a4"

Что я упускаю из виду?

var tmpCNoteID = dr["CaseNoteID"].ToString();
                var filter = "ParentNote="+tmpCNoteID;

                DataRow[] childRows = cNoteDT.Select(filter);
Это было полезно?

Решение

Попробуйте заключить GUID в одинарные кавычки:

var filter = "ParentNote='"+tmpCNoteID+"'";

Другие советы

это должно работать:

   var tmpCNoteID = dr["CaseNoteID"].ToString();
                var filter = "ParentNote=\""+tmpCNoteID+"\"";

                DataRow[] childRows = cNoteDT.Select(filter);

Я знаю, что это старая тема, но я хотел добавить к ней дополнение.При использовании оператора IN с идентификатором Guid (например:Родительское примечание В ( , , и т.д.) ) тогда одинарные кавычки больше не принимаются.В этом случае необходим метод CONVERT (предложенный granadaCoder).(Одинарные кавычки вызывают исключение при сравнении Guid со строкой с помощью оператора '='...который мы на самом деле не используем.)

Подробные сведения: Я унаследовал некоторый устаревший код, который создал большую строку фильтра в формате: MyColumn = '11111111-2222-3333-4444-555555555555' OR MyColumn = '11111111-2222-3333-4444-555555555555' ....

Когда количество идентификаторов guid (и, следовательно, количество предложений OR) становилось слишком большим, это вызывало исключение переполнения стека.Заменив многочисленные предложения OR предложением IN, я смог установить фильтр без исключения.Но использование предложения IN означает необходимость использования подхода CONVERT.

Вот один метод, который я использую:

            MyStrongDataSet ds = new MyStrongDataSet();
            Guid myUuid = new Guid("11111111-2222-3333-4444-555555555555");

            System.Data.DataRow[] rows = ds.MyStrongTable.Select("MyGuidProperty = (CONVERT('" + myUuid.ToString("N") + "', 'System.Guid'))");


            //Fish out a single row if need be and cast to a strong row
            if (null != rows)
            {
                if (rows.Length > 0)
                {
                    MyStrongDataSet.MyStrongTableRow returnRow = rows[0] as MyStrongDataSet.MyStrongTableRow;
                    return returnRow;

                }
            }
            return null;

Вот небольшое изменение:

  string filterSql = "MyGuidProperty ='{0}'";

  filterSql = string.Format(filterSql, Guid.NewGuid().ToString("D"));
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top