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

4

3 に答える 3

1

Contains の代わりに System.Data.Linq.SqlClient.SqlMethods.Like() を使用できます。

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

于 2016-06-14T22:01:21.997 に答える
1

Xml 列を varchar(...) として公開するビューを作成し、それを照会します。

于 2013-02-19T10:27:15.517 に答える
0

xmlファイルをxml列のある一時テーブルにインポートし、ファイルを解析してリレーショナルテーブルに配置しようとします。

于 2013-02-19T10:31:53.093 に答える