我需要使用按 xml 类型的列过滤从数据库表中选择行。
表格看起来像(短版)
id
dbfield int
xmlfield xml
我用这种方式过滤它
IQueryable<Data.entity> q = from u in datacontex.entities
select u;
if (val1.HasValue)
q = q.Where( x => x.dbfield > val1.value)
if (val2.HasValue)
q = q.Where( x=> x.dbfield < val2.value)
if (!string.IsNullOrEmpty(searchString))
q = q.Where ( x=> x.xmlfield contains values from searchString)
xmlfield 中的 XML 看起来很简单
<doc>
<item id="no">test/WZ/2009/04/02</item>
<item id="title">blabla</item>
...
问题是如何在 linq 中添加 WHERE 条件,最好将此条件转换为 ms-sql 查询,而不处理 web 服务应用程序上的数据集。
谢谢。
最佳答案
据我所知,LINQ-to-SQL 不支持 TSQL 中的 xml 扩展。我看到的两个选择:
- 为使用 sql/xml 语法的整个查询编写一个 SPROC/udf,并将其映射到您的数据上下文
- 编写一个 UDF 来对单行进行测试(返回 bool 值),将其映射到数据上下文,然后使用
ctx.SomeUdf(row)
在where
LINQ 的子句
关于linq - 使用 linq-to-sql 和 xlinq 按 xml 列内容过滤数据库记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1741284/