Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用linq to sql和xlinq按xml列内容筛选数据库记录_Linq_Linq To Sql_Linq To Xml - Fatal编程技术网

使用linq to sql和xlinq按xml列内容筛选数据库记录

使用linq to sql和xlinq按xml列内容筛选数据库记录,linq,linq-to-sql,linq-to-xml,Linq,Linq To Sql,Linq To Xml,我需要使用按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

我需要使用按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)
IQueryable q=来自datacontex.entities中的u
选择u;
if(val1.HasValue)
q=q.Where(x=>x.dbfield>val1.value)
if(val2.HasValue)
q=q.Where(x=>x.dbfieldx.xmlfield包含来自searchString的值)
xmlfield中的XML看起来非常简单

<doc>
  <item id="no">test/WZ/2009/04/02</item>
  <item id="title">blabla</item>
...

测试/WZ/2009/04/02
布拉布拉
...
问题是如何在linq中添加WHERE条件,最好将该条件转换为ms sql查询,而无需在webservice应用程序上处理数据集


谢谢。

LINQ to SQL不支持TSQL中的xml扩展。我看到两个选择:

  • 为使用sql/xml语法的整个查询编写存储过程/udf,并将其映射到数据上下文
  • 编写一个UDF,用于测试单行(返回bool),将其映射到数据上下文,并在LINQ的
    where
    子句中使用
    ctx.SomeUdf(row)

您还可以在SQL Server表上创建计算列,这些列从XML中提取这些比特和片段,并像存储表上的“普通”字段一样存储它们。我一直在生产系统的各个地方使用这种技术——效果很好

完成此操作后,您可以像普通表字段一样使用这些字段,并可以使用它们在Linq到SQL中进行筛选-没问题

<doc>
  <item id="no">test/WZ/2009/04/02</item>
  <item id="title">blabla</item>
...