Используя Entity Framework, как я могу выполнить поиск по номеру телефона, игнорируя пробелы?

#c# #entity-framework #asp.net-core #linq-to-sql

Вопрос:

 var Data = (from Client in _context.Client.Include(c => c.ClientType)
            select Client);

Data = Data.Where(m => ...  || (m.MobilePhone != null amp;amp; String.Concat(m.MobilePhone.Where(c => !Char.IsWhiteSpace(c))) == search)).ToList();
 

Это работает, если значение mobilephone не равно нулю, но выдает ошибку с исключением нулевой ссылки, если phonenumber значение равно нулю.

Я добавил m.MobilePhone != null условие, но, похоже, обычный AND порядок здесь не применяется, поэтому это не останавливает ошибку.

Я знаю, что мог бы преобразовать в список, а затем отфильтровать его, но для этого количество результатов слишком велико.

Есть какие-либо предложения о том, как исправить ошибку или другой подход?

Комментарии:

1. Используйте м. мобильный телефон. Обрезка() игнорирует пробелы при поиске.

2. Я хочу игнорировать все пробелы, даже те, которые находятся в середине строки. Поиск по 123456789 должен вернуть результаты, если у вас есть номер телефона 123 456 789 и т. Д.

Ответ №1:

Используйте !строку.IsNullOrEmpty для отфильтровывания пустого и пустого пространства

 var Data = (from Client in _context.Client.Include(c => c.ClientType)
select Client);

Data = Data.Where(m => !string.IsNullOrEmpty(m.MobilePhone) amp;amp; m.MobilePhone == search).ToList();
 

Ответ №2:

Это для того, чтобы удалить все пробелы в строке, как это? введите описание изображения здесь

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

 string str = "123 456 789";
str = Regex.Replace(str, @"s", "");
 

Ответ №3:

Мой приведенный выше код верен. Он работает после обновления с EntityFrameworkCore.Sqlserver 2.1.3 до 2.1.14