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

我的表中有一列包含值的列

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

filter由’;’分隔 并且每个filter的值由’,’分隔。 Filter的名称和值之间有一个’:’。

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

您不能在Linq to Entities查询中使用正则表达式,因为它们无法转换为SQL。 你甚至不能使用String.Split来分割你的filter; 。 你有两个选择:

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

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

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

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