在 Linq to Sql 和 Sql 2005+ Xml Fields 方面,我们的开发遇到了一个主要障碍。我们有一个包含字段的 Xml blob 字段...
<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 Profiler 嗅探)并使用直接 XQuery 替换 UDF,则查询需要不到一秒钟的时间(显然是我们想要的)。我见过关于 Xml Fields 的类似问题(即这个问题),但常见的答案是使用 UDF——但我们已经证明,如果广泛使用这些是低效的。
我们希望有一些低级别的点,我们可以获取命令文本并使用正确的 XQuery 语法(通过 RegEx)替换 UDF。不理想,但这是我们认为可行的唯一解决方案。我们对任何事情都持开放态度——命令文本翻译、CLR 与 SQL 的集成等。
在某些情况下,我们已经可以这样做了。例如,如果我们总是有一个 IQueryable,其中 T 不是匿名和/或复杂/嵌套类型,我们可以调用 GetCommandText,然后调用 DataContext.Translate()。但是,对于匿名/复杂类型和/或标量查询,我们看不到可以挂钩的地方。
非常感谢任何建议。