10

我的表中有一个列,其中包含以下值

    "FilterA:123,234,34;FilterB:12,23;FilterC:;FilterD:45;"

过滤器由';'分隔 每个过滤器的值用“,”分隔。过滤器的名称和它的值之间有一个“:”。

现在,我可以做任何只能提取值部分的事情吗?就像“FilterA”的“123,234,34”一样。或者我可以给它一个像“234”这样的数字来搜索“FilterA”的值部分和/或“FilterB”的值部分中的“54”吗?我想我知道使用正则表达式是可能的,但我不知道如何。

4

4 回答 4

13

您不能在 Linq to Entities 查询中使用正则表达式,因为它们不能被翻译成 SQL。你甚至不能用.String.Split来分割你的过滤器;。您在这里有两个选择:

  • 更改数据库表结构。例如,创建Foo_Filter将您的实体链接到过滤器的表。然后创建Filters将包含过滤器数据的表。
  • 在内存中执行查询并使用 Linq to Objects。此选项会很慢,因为您必须将所有数据从数据库获取到内存
于 2013-01-19T19:24:28.853 回答
4

如果您的底层数据库提供程序是 SQL Server,那么您可以使用SqlMethods.Like将数据库结果集过滤为可管理的数据子集,然后可以使用 RegEx 在本地进行分析

于 2013-01-20T09:57:34.153 回答
0

+1 @lazyberezovsky,您不能在 Linq to Entities 中执行正则表达式,因为它无法将其转换为 SQL。您可以将所有记录拉回内存,然后对其执行 Linq to Objects(对变量执行.ToList()一个变量,然后对该正则表达式执行第二个 linq 查询),但这意味着您会将每个 db 记录加载到内存中以处理此查询。相同的建议:更改数据库结构,这样您就不需要这样做了。

于 2013-01-19T19:29:29.390 回答
0

我想如果您希望所有内容都在数据库服务器上执行,您需要一个可以解析这些过滤器的 SQL 函数,可能会返回一个多列表。不幸的是,我不在可以提供任何示例代码的机器上。

于 2013-01-19T19:36:37.940 回答