私たちの開発は、LinqtoSqlおよびSql2005+XmlFieldsの面で大きな障害に遭遇しました。フィールドを含むXmlblobフィールドがあります...
<Profile name-first="Terry" name-last="Aney" [...more]/>
LINQ to SQLを活用するために、SQLでUDFを作成し、それをDataContextに追加して呼び出します(大まかにLINQ to SQLに基づいています(パート6-ストアドプロシージャを使用したデータの取得) )。ただし、これらの関数を使用すると、SQLによるXMLインデックス作成は役に立たなくなります。14,000行の母集団に対してフィルタリングおよび順序付けされたクエリであり、デフォルトの30秒のCommandTimeoutでタイムアウトになります。しかし、コマンドテキスト(SQLプロファイラーによってスニッフィングされた)を取得し、UDFを直接XQueryと交換すると、クエリは1秒未満で完了します(明らかに必要なものです)。Xmlフィールドについて同様の質問(つまりこの質問)を見てきましたが、一般的な答えはUDFを使用することですが、広範囲に使用すると非効率的であることが証明されています。
コマンドテキストを取得し、適切なXQuery構文(正規表現を介して)でUDFを交換できる低レベルのポイントがあることを期待しています。理想的ではありませんが、それが実現可能な唯一の解決策です。コマンドテキストの翻訳、SQLとのCLR統合など、何でも可能です。
特定の状況では、これはすでに実行できます。たとえば、Tが匿名および/または複合/ネストされたタイプではないIQueryableが常にある場合は、GetCommandTextを呼び出してから、DataContext.Translate()を呼び出すことができます。ただし、匿名/複雑なタイプやスカラークエリの場合、フックする場所が見つかりません。
どんな提案でも大歓迎です。