我需要查询另一个表,该表依赖于另一个表的参数,该表的列包含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。