继此线程中的一个答案之后; 在 Linq To SQL 中使用 XQuery?
我正在尝试创建一个 sql 表函数,该函数将接受参数以便对 xml 数据执行查询。然后,该函数可以由 linq 查询使用。
我遇到的问题是;
如果我从前面提到的线程中获取代码,我会得到“xml 数据类型方法“值”的参数 1 必须是字符串文字”错误。
如果我使用sp_executesql编写自己的函数,那么我会得到“只有函数和扩展存储过程可以在函数内执行”。
这是我的功能;
CREATE FUNCTION fnGetOpManualXMLDataFromInt
(
-- Add the parameters for the function here
@valueXPath varchar(255),
@criteriaXPath varchar(255),
@intCriteriaVal int
)
RETURNS @returntable TABLE
(
omId int,
xmlNodes xml
)
AS
BEGIN
DECLARE @strExecute nvarchar(4000), @SingleQuote varchar(1)
SET @SingleQuote = char(39)
SET @strExecute = 'insert into @returntable select omID,
omText.query(' + @SingleQuote + @valueXPath + @SingleQuote + ') as Value
from dbo.htOperationsManuals
where omText.value(' + @SingleQuote + @criteriaXPath + @SingleQuote + ', ' + @SingleQuote + 'int' + @SingleQuote + ') = ' + ltrim(str(@intCriteriaVal))
exec sp_executesql @strExecute
return
end
这是我的测试;
DECLARE
@valueXPath varchar(255),
@criteriaXPath varchar(255),
@intCriteriaVal int
SET @valueXPath = '/operationsManual/sections/section/contentItem'
SET @criteriaXPath = '(/operationsManual/sections/section/contentItem/imageContentItem/imageId)[1]'
SET @intCriteriaVal = 131
select * from fnGetOpManualXMLDataFromInt(@valueXPath, @criteriaXPath, @intCriteriaVal)
谁能想到实现这一目标的方法?
编辑:顺便说一句,我没有直接在 linq 中这样做的原因是我得到了一个错误;
Dim imageUsage = From opmanual In dc.OperationsManuals _
Where opmanual.OutOfService = False _
And opmanual.omText.<sections>.<section>.<contentItem>.<imageContentItem>.<imageId>.Value = imageId _
Select opmanual
错误;
Message = "Method 'System.Collections.Generic.IEnumerable`1[System.Xml.Linq.XElement] Elements(System.Xml.Linq.XName)' has no supported translation to SQL."