如何使用Linq-to-SQL查询具有XML列(作为字符串)的SQL Server表

本文关键字:字符串 SQL Server 查询 Linq-to-SQL 何使用 XML | 更新日期: 2023-09-27 18:00:09

如何使用LINQ to SQL查询具有XML数据类型列的表作为IQueryable?

SQL Server表:

Id [int]
SomeData [xml]

SomeData的一个例子可能是:

<container><Person>Joe Smith</person></container>

在T-SQL中,我可以像这样查询表,以查找具有特定nam的员工,例如:

SELECT 
    *
FROM
    [MyTable]
WHERE 
    SomeData.value('(//*[local-name()="Person"])[1]', 'varchar(max)') = 'Joe Smith'

或者将xml视为字符串,搜索字符串而不考虑xml模式:

SELECT 
    *
FROM
    [MyTable]
WHERE 
    CONVERT(varchar(max), SomeData) like '%Joe Smith%'

现在我转向LINQ to SQL,并希望执行第二个查询:

var myTable = db.MyTable.Where(x => x.SomeData.Value.Contains("Joe Smith"));

我得到错误:

"The member 'System.Xml.Linq.XElement.Value' has no supported translation to SQL.

我理解为什么会出现错误,但有办法解决吗

在这种情况下,能够将列作为字符串查询(没有xml结构的概念)是完全可以的。

如何使用Linq-to-SQL查询具有XML列(作为字符串)的SQL Server表

创建一个将Xml列公开为varchar(…)的视图并对其进行查询。

您可以使用System.Data.Linq.SqlClient.SqlMethods.Like().而不是Contains

var myTable = db.MyTable.Where(x => SqlMethods.Like(x.SomeData, "%Joe Smith%"));

将xml文件导入到带有xml列的临时表中,然后THE尝试解析该文件并将其放入关系表中。