0

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

SQL Server 表:

Id [int]
SomeData [xml]

SomeData 的一个示例可能是:

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

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

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 结构的概念)是完全可以的。

4

3 回答 3

1

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

于 2013-02-19T10:27:15.517 回答
1

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

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

于 2016-06-14T22:01:21.997 回答
0

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

于 2013-02-19T10:31:53.093 回答