このスレッドの回答の1つに続いて; Linq To SQLでXQueryを使用していますか?
xmlデータに対してクエリを実行するためにパラメータを受け取るSQLテーブル関数を作成しようとしています。この関数は、linqクエリで使用できます。
私が持っている問題は;
前述のスレッドからコードを取得すると、「xmlデータ型メソッド「value」の引数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."