【问题标题】:VB.net linq .contains on XML columnVB.net linq .contains on XML 列
【发布时间】:2016-02-26 15:54:16
【问题描述】:

我有一个数据库,其中包含一个名为 Results 的 XML 列。 此列包含工厂测试的结果和不同的 XML 格式,具体取决于执行的测试。

我正在开发一个可以浏览结果的 GUI,因此我需要动态过滤此列。

我的第一个想法是使用Results.contains("myfilter"),但这似乎不起作用。

我正在使用带有 linq 和实体的 Visual Studio 2015。

这是我的查询:

Using context As New Entities
    Dim query = From tr In context.TestResults
                Join t In context.Tests On a Equals tr.Tests
                Join ts In context.TestStations On ts Equals tr.TestStations
                Join ut In context.UnitTraveler On ut Equals tr.UnitTraveler
                Where t.Id = TestID
                Where ts.Id = TestStationID
                Where tr.Results.Contains("TestCurrent")
                Take Count
                Select ut.SerialNumber, ut.ModelString, ut.Passed, tr.Results, tr.StartedOn, tr.EndedOn
                Order By StartedOn Descending
End Using

2015-12-01 更新:我仍然没有找到解决方案。有人有想法吗?

【问题讨论】:

  • 由于 .NET 中的 XML data type in SQL mapped to XElement,我会尝试:Where tr.Results.ToString().Contains("TestCurrent")(虽然不确定 LINQ-to-SQL 是否支持 XElement.ToString()
  • 这不起作用。 tr.Results.toString 也不像 "%TestCurrent%" 或 tr.Results.toString 像 "TestCurrent"
  • 我还没有找到解决方案。有人有想法吗?

标签: sql xml vb.net linq


【解决方案1】:

如果Results 属性的类型为String,并且您在此字符串中搜索特定子字符串,则可以使用:

query = (From tr In ... Where tr.Results Like "*TestCurrent*")

如果结果是一个集合或列表

query = (From tr In ... Where tr.Results.Find(Function(f As Result) f.Contents Like "*TestCurrent*") IsNot Nothing)

请根据您的类名和属性更改使用的词结果和内容。

【讨论】:

  • 结果是 XML 类型。 tr.Results Like "TestCurrent" 不起作用
  • XML 是什么意思,该属性的类型是字符串吗?确保在 TestCurrent 前后使用 *。
  • 列的类型是 XML。在 sql management studio 中,类型是 XML(.) 我尝试在 TestCurrent 前后使用 % 和 * 都没有成功。
猜你喜欢
  • 1970-01-01
  • 2010-11-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多