LINQ Dynamic WHERE, но сначала очищайте специальные символы - PullRequest
0 голосов
/ 13 сентября 2009

У меня есть код ниже, но он выдает ошибку на

.Where(p => Regex.Replace(p.Phone, rgPattern, "") == Regex.Replace(phone.Trim(), rgPattern, "")

string rgPattern = @"[\\\/:\*\?""<>|()-]";

var members = from m in Context.Members select m;

  if (!String.IsNullOrEmpty(phone))
   members = members.Where(p => Regex.Replace(p.Phone, rgPattern, "") == Regex.Replace(phone.Trim(), rgPattern, ""));

Я знаю, что комманд LINQ не будет выполнен, пока я не запущу:

members.OrderBy(orderBy).Skip(startRow).Take(maxRows).ToList();

Есть идеи, как очистить значение перед сравнением?

1 Ответ

1 голос
/ 13 сентября 2009

Возможно, это проблема вашей архитектуры данных. Вот почему мы постоянно сохраняем данные в таблицах, чтобы вам не приходилось совершать подобные злые поступки.

У вас есть несколько вариантов здесь:

  1. Очистите фактические данные и добавьте защиту на слой данных, чтобы сохранить чистоту своих телефонных номеров.

  2. Создайте представление или вычисляемый столбец в ваших данных, который очищает номер телефона на слое данных, затем сопоставьте с этим чистым номером телефона и запросите вместо этого столбца.

  3. Вызовите ToList () для подмножества ваших строк перед выполнением запроса на основе регулярных выражений, а затем используйте Linq to Objects, чтобы выполнить регулярное выражение для этих строк. Это может быть непозволительно, если вы не можете сузить свои ряды перед использованием Linq to Objects.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...