Есть пользовательский интерфейс, содержащий два поля ввода(Откуда, Куда), в которые пользователь вводит маску телефона, при этом возможны варианты: 91*(находит все номера начинающиеся на 91), *91(заканчивающиеся на 91) или 1234(заканчивающиеся на 1234). По сути два последних исхода одинаковы.
Так как дело происходит со строками решил реализовать класс с методом расширения для строки:
public static class StringExtenstions
{
public static bool Like(this string str, string value, string[] seps)
{
if (String.IsNullOrWhiteSpace(value))
return true;
value = value.Trim();
var position = -1;
foreach (var sep in seps)
{
if (!value.Contains(sep))
continue;
position = value.IndexOf(sep, StringComparison.Ordinal);
value = value.Replace(sep, String.Empty);
break;
}
return position > 0 ? str.StartsWith(value) : str.EndsWith(value);
}
}
И пробую запустить сие творение при выборке телефонов из бд:
var seps = new[] { "%", "*" };
calls = calls.Where(x => x.Source.Like(filter.From, seps) || x.Transfers.Any(t => t.SubjectFrom.Like(filter.From, seps)));
К моему сожалению происходит ошибка:
Выражению LINQ to Entities не удается распознать метод "Boolean Like(System.String, System.String, System.String[])", поэтому его нельзя преобразовать в выражение хранилища.
Есть какие-нибудь идеи как правильно решить данную проблему с помощью linq, не городя при этом кучу условий(if) и без написания запросов sql в коде(select * from calls where Source like '91%')?