hamid-shrk Ответов: 3

Как проверить строку символ за символом в C# linq


Привет Друзья,
У меня есть поле в таблице базы данных как " SimCardNumber",
Теперь у меня есть форма для поиска номера SIM-карты, и пользователи могут ставить номера в определенное положение.
например, они будут искать 9*2***54**
и я хочу показать любой "номер SimCardNumber" из моей таблицы, который находится в этом шаблоне.
Мне нужен запрос на него.
спасибо за вашу помощь

Что я уже пробовал:

public IQueryable<SimCardOutPut> GetSimCardBySearch(string number)
        {
            var context = new Entities();
            var simcard = context.SimCards;
            var operators = context.Operators;
            var rondtype = context.RondTypes;
            var city = context.Cities;
            var query = from s in simcard
                        join o in operators on s.IdOperatorFK equals o.IdOperator
                        join r in rondtype on s.IdRondTypeFK equals r.IdRondType
                        join c in city on s.IdCityFK equals c.IdCity
                        where
                            s.Number.Contains(number)
                        select new SimCardOutPut()
                        {
                            IdSimCard = s.IdSimCard,
                            Operator = o.Title,
                            RondType = r.Title,
                            City = c.Title,
                            Number = s.Number,
                            Type = s.Type,
                            Status = s.Status,
                            Quality = s.Quality,
                            Seller = s.Seller,
                            Price = (Int64)s.Price,
                            ShowType = s.ShowType,
                            Active = (Boolean)s.Active
                        };
            return query;
        }

3 Ответов

Рейтинг:
28

Richard Deeming

К сожалению, нет LIKE функции в рамках организации, и С код, во-первых, там, кажется, не быть вариант, чтобы создать одну.

Однако если вы добавите ссылку на EntityFramework.SqlServer собрание, вы мочь используйте SqlFunctions.Функция patindex[^] метод. К сожалению, это будет не так быстро, как LIKE запрос, но он должен быть быстрее, чем загрузка всех данных и фильтрация на стороне клиента.

public IQueryable<SimCardOutPut> GetSimCardBySearch(string number)
{
    string sqlPattern = number.Replace('*', '_');
    
    var context = new Entities();
    var simcard = context.SimCards;
    var operators = context.Operators;
    var rondtype = context.RondTypes;
    var city = context.Cities;
    var query = from s in simcard
                join o in operators on s.IdOperatorFK equals o.IdOperator
                join r in rondtype on s.IdRondTypeFK equals r.IdRondType
                join c in city on s.IdCityFK equals c.IdCity
                where
                    SqlFunctions.PatIndex(sqlPattern, s.Number) != 0
                select new SimCardOutPut()
                {
                    IdSimCard = s.IdSimCard,
                    Operator = o.Title,
                    RondType = r.Title,
                    City = c.Title,
                    Number = s.Number,
                    Type = s.Type,
                    Status = s.Status,
                    Quality = s.Quality,
                    Seller = s.Seller,
                    Price = (Int64)s.Price,
                    ShowType = s.ShowType,
                    Active = (Boolean)s.Active
                };
    return query;
}


hamid-shrk

Спасибо, мой дорогой друг, это очень хорошо работает :)

Рейтинг:
2

Midi_Mick

Возможно, регулярное выражение было бы проще всего реализовать здесь

Regex r = new Regex(number.Replace("*", @"\d"));
....

where r.Match(s.Number).Success


Richard Deeming

Удачи вам в том, чтобы ваша база данных распознала это! :)

Рейтинг:
2

Patrice T

Просто несколько полезных ссылок для регулярных выражений

Вот ссылка на документацию по регулярным выражениям:
perlre - perldoc.perl.org[^]
Вот ссылки на инструменты, помогающие создавать регулярные выражения и отлаживать их:
.Объем тестер регулярное выражение - регулярное выражение шторм[^]
Регулярное Средство Выражения Эспрессо [^]
Это показывает вам регулярное выражение в виде красивого графика, который действительно полезен для понимания того, что делает регулярное выражение:
Debuggex: онлайн-тестер визуальных регулярных выражений. JavaScript, Python и PCRE.[^]