Linq(EntityFramework)中的Regex,数据库中的字符串处理



我的表中有一列包含值

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

筛选器用";"分隔每个过滤器的值用","分隔。筛选器的名称和值之间有一个":"。

现在,我可以做任何只能提取值部分的事情吗?类似于"FilterA"的"123234,34"。或者我可以给它一个像"234"这样的数字来搜索"FilterA"的值部分和/或"FilterB"的值部的"54"吗?我知道使用regex是可能的,但我不知道怎么做。

不能在Linq-to-Entities查询中使用正则表达式,因为它们无法转换为SQL。您甚至不能使用String.Split;拆分过滤器。这里有两个选项:

  • 更改数据库表结构。例如,创建表Foo_Filter,该表将把您的实体链接到过滤器。然后创建包含过滤器数据的表Filters
  • 在内存中执行查询,并对对象使用Linq。此选项将很慢,因为您必须将所有数据从数据库提取到内存

如果您的底层数据库提供商是SQL Server,那么您可以使用SqlMethods。喜欢将数据库结果集筛选为可管理的数据子集,然后使用RegEx 进行本地分析

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

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

相关内容

  • 没有找到相关文章

最新更新