Выбор запроса к атрибуту данных столбца xml с помощью Linq to SQL - PullRequest
0 голосов
/ 10 января 2019

Мне нужно запросить некоторую таблицу в зависимости от аргумента другой таблицы со столбцом, содержащим данные XML. Проблема состоит в том, чтобы получить весь код LINQ в одном запросе как IQuerable.

Допустим, у меня есть таблица A, B и C. A содержит столбцы, такие как Id, Name и т. Д., А также столбец DataContent с XML. В этом XML у меня есть Id для получения записи из таблицы B, а затем - по атрибуту Name - к записям в таблице C. Результатом должны быть записи из таблицы C

Таблица A | Id | Имя | DataContent | Таблица B | Id | Имя | Таблица C | Id | Имя |

Я действительно не знаю, как выполнить что-то вроде:

XElement.Parse(recordA.DataContent).Descendants("Fields").Single(d => d.Attribute("myid").Value == "recordId").Value

в Linq to SQL и выберите результат для другого запроса.

Что мне нужно, так это LINQ Query, в котором я могу получить все записи из таблицы C, которые зависят от идентификатора XML-запроса из таблицы A в B, и вернуть новый объект (ViewModel).

Что-то вроде

e.QueryableSource = (from tableA in db.A
                         join tableB in db.B on tableB.Id equals tableA.ParsedXmlId
                         join tableC in db.C on tableC.Name equals tableB.Name
                         ...etc...

                         where tableA.ParsedXmlId IN (select from tableB where tableB.Id = XElement.Parse(tableA.DataContent).Descendants("Fields").Single(d => d.Attribute("id").Value == "myId").Value)

                         select new ViewModel
                         {
                             Id = ...,
                            Name = ...,
                            Info = ...
                         }
.

) AsQueryable ();

Я знаю, что можно анализировать XML в SqlServer как

DataContent.value('(/Root/Object/DataContext/Fields/Field/@myId)[1]', 'nvarchar(max)') as QueryResult

но я не знаю, как использовать его в linq в качестве параметра.

Все необходимые мне шаги:

Выберите XML из A, затем перейдите к этим идентификаторам в B для выбора имени; затем в C-таблицу для Id, где C.Name == результат предыдущего запроса; и чем C.Id для A, где выбираются все записи таблицы A, зависит от этих C.Id.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...