我需要使用xml-type column进行过滤来从数据库表中选择行。
表看起来像(短版)
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查询,而不在webservice应用程序上处理数据集。
感谢。
答案 0 :(得分:3)
LINQ-to-SQL不支持AFAIK在TSQL中的xml扩展。我看到两个选择:
ctx.SomeUdf(row)
子句中使用where
答案 1 :(得分:1)
您还可以在SQL Server表上创建计算列,从XML中提取这些位,并将它们存储为表中的“普通”字段。我一直在生产系统中的各个地方使用这种技术 - 工作得很好。
执行此操作后,您可以使用普通表字段之类的内容,并且可以使用它们在Linq-to-SQL中进行过滤 - 没问题。