2014-01-15 7 views
2

У меня возникла ситуация, когда мне нужно ограничить пользователя, чтобы ввести URL-адрес, который уже выходит в БД. Вот функция, которую я использую для проверки:Проверка наличия или отсутствия URL-адреса из базы данных

С помощью этого метода можно проверить для Url сказать «/ testurl /», который соответствует URL «/ testurl» в БД. Но в других случаях это не сработает, когда я иду, чтобы сравнить строку «/ testurl» с «/ testurl /» в БД.

Мне нужно удалить конечную косую черту в обоих случаях, но TrimEnd (new [] {'/'}) не будет работать над столбцом в запросе EF. Таким образом, следующий метод не сработает.

public bool IsContentUrlExists(string url) 
    { 
      url = url.Trim().TrimEnd(new[]{'/'}); 
      return Context.Contents.Any(content => content.Url.Trim().TrimEnd(new[]{'/'}) == url); 
    } 

Может ли кто-нибудь помочь мне с альтернативным решением?

NB: У нас нет никакого стандарта для URL в нашей существующей БД

+0

Разве вы не можешь просто поместить URL из базы данных в строку переменной, а затем удалить завершающий слэш, а затем сравнить две строки? Вы не пытаетесь что-либо изменить в базе данных, так это в чем проблема? – wingyip

+0

Это не идеальное решение. Я не хочу выводить весь объем данных в виде списка или какого-то рода и манипулировать этим. – Maninder

+0

Ах ладно. Ничего страшного не было в комментариях выше. Кажется, вы должны искать совпадение, которое может иметь ИЛИ может не иметь завершающую косую черту – wingyip

ответ

2

Используя код плюс мое

public bool IsContentUrlExists(string url) 
{ 
     url = url.Trim().TrimEnd(new[]{'/'}); 
     return Context.Contents.Any(content => content.Url == url || content.Url == url + "/"); 
} 

непроверенная, но что-то вроде выше shoudl работы, не так ли?

Wing

+0

Спасибо за решение. – Maninder

0

В качестве альтернативы вы можете попробовать:

url = url.Trim().TrimEnd(new[] { '/' }); 

var lstUrls = new List<string> { url, url + "/" }; 
return Context.Contents.Any(content => lstUrls.Contains(content.Url)); 

Он сравнивает список из двух строк: одна заканчивается косой чертой и другой без. Если в базе данных будет соответствие любой из этих двух строк, это означает, что URL существует!

Смежные вопросы