2014-01-15 31 views
2

我有一種情況,我需要限制用戶輸入已經退出數據庫的Url。 這裏是我使用的驗證功能:驗證網址是否存在於數據庫

用這種方法我可以驗證的URL說「/ testurl /」,在DB的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); 
    } 

任何人都可以幫助我的替代解決方案嗎?

注意:我們沒有對任何URL標準我們現有的DB

+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工作的東西,不應該嗎?

+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!