Мне нужно запросить некоторую таблицу в зависимости от аргумента другой таблицы со столбцом, содержащим данные 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.