使用Linq to SQL选择xml列数据属性上的查询

时间:2019-01-10 17:56:46

标签: c# sql-server xml linq linq-to-sql

我需要查询另一个表,该表依赖于另一个表的参数,该表的列包含xml数据。问题是在一个查询中将所有LINQ代码作为IQuerable获取。

假设我有表A,B和C。A包含Id,Name等列和带有XML的DataContent列。在这种XML中,我有一个ID,可以从表B中获取记录,然后通过“名称”属性获取表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查询,我可以从表C获取所有记录,这些记录取决于表A到B的xml-query id,并返回一个新对象(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();

我知道可以像这样在SqlServer中解析XML

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

但是我不知道如何在linq中使用它作为参数。

我需要的所有步骤:

从A中选择XML,然后转到B的ID以选择Name;然后到ID的C表,其中C.Name ==先前查询的结果;而不是C.Id到选择所有A表记录的A取决于那些C.Id。

0 个答案:

没有答案