我在SQL Server 2008数据库中有一个表ContentHistory,表的列的数据类型为xml,不是NULL.此列存储完整的XML文档(一个包含一个或多个Article节点的Intersection根节点:
<InterSection>
<Article>
<ID>1</<ID>
...other nodes/data
</Article>
<Article>
<ID>2</<ID>
...other nodes/data
</Article>
<Article>
<ID>3</<ID>
...other nodes/data
</Article>
</InterSection>
我已经编写了一个T-SQL,该XML接收XML数据并将其粉碎,以便为每个Article节点获得一个结果行,无论是从ContentHistory表中选择的哪一行:
SELECT T2.Articles.query('.')
FROM ContentHistory
CROSS APPLY Content.nodes('/InterSection/Article') AS T2(Articles)
WHERE ... /* Filter records based on other columns in ContentHistory */
这很好用,但是我不想在我的ASP.NET MVC应用程序中将其作为存储过程来调用,因为到目前为止,所有其他数据库请求都已使用LINQ-to-SQL实现.
所以问题是如何在LINQ中实现(请在C#中使用示例)?
解决方法:
静态男孩
结合使用Linq到SQL和Linq到XML.
首先从数据上下文获取XML列.假设您已将LINQ的.dbml文件添加到XML.
//Lets say you have database called TestDB which has your ContentHistory table
TestDBContext db = new TestDBContext();
//This will return as IQueryable.
var result = db.ContentHistory.Select(p=>p.Content).Where(p=>p.Content == <your filter>);
您可以对var“结果”执行foreach循环并获得所需的结果.
和平