C # Linq Где и Regex - PullRequest
       1

C # Linq Где и Regex

1 голос
/ 30 апреля 2019

У меня есть 4 строки в моей БД (пример), я загружаю данные из БД в DataModel, например, Regex для столбцов Code и Serie:

Id;Code;Serie
1;XXX;XXX
2;XXX;XXX_A
3;WWW;YYY_A|YYY_B
4;CCC;XXX_A

Когда я использую запрос LINQ ниже с входными параметрами Код = XXX и Serie = XXX_A , я получил 2 результата, но правильный результат - только строка с идентификатором == 2

model = _seriesData.Where(s => (s.Code.IsMatch(code) && s.Type.IsMatch(serie)));

Я не знаю, в чем проблема, но LINQ работает только с одним параметром

В моей модели столбец Code и Serie являются типами регулярных выражений

UPDATE

Для строки кода Regex я также использую регулярное выражение, подобное этому XXX_A | XXX_B | YYY_A Данные в переменной _seriesData в порядке, но результат неправильный

DataModel

public class SerieModel
{
    public Regex Type { get; set; } // name of serie
    public Regex Code { get; set; }
}

Кто-нибудь мне помогает?

1 Ответ

3 голосов
/ 30 апреля 2019

Это происходит, вероятно, потому что ваше регулярное выражение соответствует подстроке , но не всей строке . Вся строка сопоставляется, завернув ваш шаблон в ^...$ символы:

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.
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...