c# - C# Linq Where 和正则表达式
问题描述
我的数据库中有 4 行(示例),我将数据从数据库加载到 DataModel,例如列 Code 和 Serie 的 Regex:
Id;Code;Serie
1;XXX;XXX
2;XXX;XXX_A
3;WWW;YYY_A|YYY_B
4;CCC;XXX_A
当我使用下面的输入参数Code = XXX和Serie = XXX_A的 LINQ 查询时,我得到了 2 个结果,但正确的结果只有一行 ID == 2
model = _seriesData.Where(s => (s.Code.IsMatch(code) && s.Type.IsMatch(serie)));
我不知道问题出在哪里,但是 LINQ 只能使用一个参数
在我的模型列 Code 和 Serie 是 Regex 类型
更新
对于代码行正则表达式,我也使用像这样的正则表达式 XXX_A|XXX_B|YYY_A _seriesData 变量中的数据是可以的,但结果是错误的
数据模型
public class SerieModel
{
public Regex Type { get; set; } // name of serie
public Regex Code { get; set; }
}
有人帮助我吗?
解决方案
发生这种情况可能是因为您的正则表达式匹配substring但不是整个 string。通过将模式包装在^...$
符号中来匹配整个字符串:
new Regex("XXX").IsMatch("XXX"); //true
new Regex("XXX").IsMatch("XXX_A"); //true <- heh, didn't expect that?
new Regex("^XXX$").IsMatch("XXX"); //true
new Regex("^XXX$").IsMatch("XXX_A"); //false <- this is what you want
因此,要么将列中的数据更改为:
Id;Code;Serie
1;^XXX$;^XXX$
2;^XXX$;^XXX_A$
3;^WWW$;^(YYY_A|YYY_B)$
4;^CCC$;^XXX_A$
或者在反序列化时将其更改为行:
public class SerieModel
{
public Regex Type { get; set; } // <- put here wrapped regex.
public Regex Code { get; set; } // <- put here wrapped regex.
}
推荐阅读
- excel - 不同模块中的相同常量名称
- perl - UNIX - 根据主列比较 2 个文件
- android - 程序类型已经存在 :: com.google.firebase.analytics.FirebaseAnalytics$UserProperty
- reactjs - Redux 简写 `mapDispatchToProps` 返回未定义的 `async` 动作/thunk
- saucelabs - 如何将测试场景设置为在 Webdriver.io 测试对象中同时运行?
- c# - 有什么方法可以在 .NET Core 上使用 ABBYY FRE
- nsis - 如何通过 NSIS 在用户级别为 HKCR 进行注册表项?我无法按用户级别在 HKCR 中输入任何条目
- python - 如何在 odoo 10 的 xml 视图中的 One2many 字段上应用域?
- azure - 天蓝色函数应用程序设置连接字符串值中密码中的分号
- php - 如何仅使用 htaccess 删除 php 扩展