验证是否存在来自DB的URL

时间:2014-01-15 11:02:00

标签: c# entity-framework linq-to-entities

我有一种情况需要限制用户输入已在DB中退出的Url。 这是我用来验证的功能:

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

使用这种方法,我可以验证一个Url说“/ testurl /”匹配DB中的url“/ testurl”。 但是,当我在DB中将“/ 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);
    }

任何人都可以帮我解决另一种解决方案吗?

N.B:我们现有的数据库中没有任何URL标准

2 个答案:

答案 0 :(得分:2)

使用您的代码加上我的

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

未经测试,但上面的shoudl工作,不应该吗?

答案 1 :(得分:0)

作为替代方案,您可以尝试:

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

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

它比较两个字符串的列表:一个以斜杠结尾,另一个没有。 如果数据库中的这两个字符串中的任何一个都匹配,则表示该URL存在!