Member 14778391 Ответов: 1

Сформируйте правильный оператор SELECT для запроса LINQ в формате iTunes XML


Я новичок vb.net пользователь и я использую следующее vb.net код для чтения XML-кода библиотеки iTunes. Я нашел его в интернете несколько лет назад, и он работает очень быстро.

Дим треки = от T в iTunes.&ЛТ;plist в теме>.&ЛТ;дикт и GT;.&ЛТ;дикт и GT;.&ЛТ;дикт&ГТ; выберите новый элемент XElement("песня", из ключевых в Т.&ЛТ;ключ&ГТ; выберите новый элемент XElement(ключ.Ценность.Метод toString.Замените(" ", ""), CType(key.NextNode, XElement).Ценность.Метод toString))
Dim iTunesTracks = из песни в треках _
Выберите песню.<trackid>.Value, _
песня.TrackNumber.Значение, _
песня.<имя>.значение, _
песня.<исполнитель>.значение, _
песня.<альбом>.значение, _
песня.<год>.значение, _
песня.<жанр>.значение, _
песня.<подкаст>.значение, _
песня.<вид>.значение, _
песни.&отдых, типа рельсов и GT;.Значение, _
песня.<компиляция>.значение
DataGridView1.Источник данных = iTunesTracks.Список

Проблема в том, что этот код преобразует все в строку, поэтому такие поля, как Compilation, которые должны быть логическими, ничего не показывают в DataGridView. Я хочу выбрать только те записи iTunes, для которых флаг компиляции установлен в True. Из моего обзора онлайн-ресурсов следует, что я мог бы добавить оператор SELECT или WHERE к приведенному выше коду, который выполнял бы правильную фильтрацию, но я не могу заставить код работать должным образом. Есть идеи?

Что я уже пробовал:

1. я попытался создать DataTable с новым столбцом CompilationTrueFalse, который заполняется строкой (либо "True", либо "False"), прочитав ячейки DataGridView и выполнив преобразование.

2. я попытался перестроить линию выше, которая делает Из ключа в t<key>...выберите Новый XElement… чтобы удалить преобразование всего в строку, но я не мог определить правильные методы и синтаксис.

3. Я пытался добавить предложение where в коде выше:

Где(Т.Элементы("ключ").Любой(функция(EXP) за выр.Значение = "сборник", атакже (ctype для(эксп.NextNode, Элемент XElement).Name = "true"))

Но я также не мог заставить этот код работать. Спасибо за любую помощь.

1 Ответов

Рейтинг:
6

Member 14778391

не берите в голову. Я все понял. Все, что мне нужно было сделать, это добавить предложение Where следующим образом:

Дим треки = от T в iTunes.&ЛТ;plist в теме>.&ЛТ;дикт и GT;.&ЛТ;дикт и GT;.&ЛТ;дикт&ГТ; выберите новый элемент XElement("песня", из ключевых в Т.&ЛТ;ключ&ГТ; выберите новый элемент XElement(ключ.Ценность.Метод toString.Замените(" ", ""), CType(key.NextNode, XElement).Ценность.Метод toString))
Dim iTunesTracks = из песни в треках _
Где song.<compilation>.Value IsNot vbNullString
Выберите песню.<trackid>.Value, _
песня.<tracknumber>.Value, _
песня.<имя>.значение, _
песня.<исполнитель>.значение, _
песня.<альбом>.значение, _
песня.<год>.значение, _
песня.<жанр>.значение, _
песня.<подкаст>.значение, _
песня.<вид>.значение, _
песни.&отдых, типа рельсов и GT;.Значение, _
песня.<компиляция>.значение
DataGridView1.Источник данных = iTunesTracks.Список

Счастливого кодирования.