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 に目を向け、2 番目のクエリを実行します。
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 構造の概念なし) としてクエリできることはまったく問題ありません。