我有一种情况需要限制用户输入已在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标准
答案 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存在!