【发布时间】:2019-09-18 21:38:55
【问题描述】:
我的数据库中有 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; }
}
有人帮我吗?
【问题讨论】:
-
请记住,
.Where子句中的几乎所有函数调用都会导致从数据库中检索数据并且该子句将在本地运行。这可能涉及通过您的网络发送大量记录并且效率非常低。 -
看起来很奇怪!如果您使用 .equals 或 '==' 进行测试,您会得到什么?
-
试试这个:model = _seriesData.Where(s => (s.Code==code && s.Serie==serie)).FirstOrDefault();
-
使用 FirstOrDefault();不是解决方案,因为我不知道我要查找的行是否在 DB 中是第一个,== 也不能用于 Regex 数据类型,Type 和 Serie 是相同的,只有另一个名称
-
当字符串类方法无法使用时,您应该使用正则表达式。正则表达式的效率远低于字符串类。您只需要一个简单的比较:model = _seriesData.Where(s => (s.Code == code) && (s.Type == serie));