C# 在Linq Sql查询中使用Replace方法
我使用RegEx删除LINQ-SQL查询中的HTML标记,但引发了以下错误: 方法C# 在Linq Sql查询中使用Replace方法,c#,regex,linq-to-sql,C#,Regex,Linq To Sql,我使用RegEx删除LINQ-SQL查询中的HTML标记,但引发了以下错误: 方法“System.String Replace(System.String,System.String,System.String)”不支持作为SQL执行 Help helpdbession=new Help(); IEnumerable articles=null; if(lang.ToLower()=“en”) { articles=helpDBSession.articles.Where(artilce=>ar
“System.String Replace(System.String,System.String,System.String)”
不支持作为SQL执行
Help helpdbession=new Help();
IEnumerable articles=null;
if(lang.ToLower()=“en”)
{
articles=helpDBSession.articles.Where(artilce=>artilce.NameEn.Contains(searchPattern)||
System.Text.RegularExpressions.Regex.Replace(artilce.ContentEn,“,String.Empty).Contains(searchPattern));
}
其他的
{
articles=helpDBSession.articles.Where(artilce=>artilce.NameAr.Contains(searchPattern)||
System.Text.RegularExpressions.Regex.Replace(artilce.ContentAr,“,String.Empty).Contains(searchPattern));
}
if(articles!=null&&articles.Count()>0)
{
return articles.ToList();
}
这里有两件事不对:
Replace
时,它会尝试将其传递给SQL Server—这当然会失败,因为SQL没有此功能。无论如何这都会失败,因为字符串没有重载。替换需要三个字符串的
您没有解释需要实现什么,但是如果您需要在SQL中存储一些HTML,我建议您使用agility pack解析它,并使用它清除标记,然后将结果保存到SQL Server。根据错误消息,我假设LINQ to SQL无法转换LINQ语句的RegEx部分,因为SQL Server不支持RegEx 你必须:
- 从数据库中获取有关where语句“Contains”部分的文章李>
- 将结果上的内容转换为列表
- 将正则表达式应用于列表中的位置
Help helpDBSession = new Help();
IEnumerable<Article> articles = null;
if (lang.ToLower() == "en")
{
articles = helpDBSession.Articles.Where(
artilce => artilce.NameEn.Contains(searchPattern)
)
}
else
{
articles = helpDBSession.Articles.Where(
artilce => artilce.NameAr.Contains(searchPattern)
)
}
if (articles != null && articles.Count() > 0)
{
if (lang.ToLower() == "en")
{
return articles.ToList().Where(
artilce => System.Text.RegularExpressions.Regex.Replace(
artilce.ContentEn,
"<(.|\n)*?>",String.Empty).Contains(searchPattern)
)
);
}
else
{
return articles.ToList().Where(
artilce => System.Text.RegularExpressions.Regex.Replace(
artilce.ContentAr,
"<(.|\n)*?>",String.Empty).Contains(searchPattern)
)
);
}
}
Help helpdbession=new Help();
IEnumerable articles=null;
if(lang.ToLower()=“en”)
{
articles=helpDBSession.articles.Where(
artilce=>artilce.NameEn.Contains(searchPattern)
)
}
其他的
{
articles=helpDBSession.articles.Where(
artilce=>artilce.NameAr.Contains(searchPattern)
)
}
if(articles!=null&&articles.Count()>0)
{
if(lang.ToLower()=“en”)
{
return articles.ToList()。其中(
artilce=>System.Text.RegularExpressions.Regex.Replace(
artilce.ContentEn,
“”,String.Empty)。包含(searchPattern)
)
);
}
其他的
{
return articles.ToList()。其中(
artilce=>System.Text.RegularExpressions.Regex.Replace(
artilce.ContentAr,
“”,String.Empty)。包含(searchPattern)
)
);
}
}
如果您提供了实际的linq代码,则会有所帮助。String.Replace
函数只接受2个参数并返回一个字符串。你能给我们看看你的密码吗?@Matt-很好。我假设它是字符串的静态函数,但看起来它是一个局部函数。它转换为类似于
语句的,因此没有RegExp。您可以在客户端上进行筛选,也可以使用M$SQL Server的CLR集成。
Help helpDBSession = new Help();
IEnumerable<Article> articles = null;
if (lang.ToLower() == "en")
{
articles = helpDBSession.Articles.Where(
artilce => artilce.NameEn.Contains(searchPattern)
)
}
else
{
articles = helpDBSession.Articles.Where(
artilce => artilce.NameAr.Contains(searchPattern)
)
}
if (articles != null && articles.Count() > 0)
{
if (lang.ToLower() == "en")
{
return articles.ToList().Where(
artilce => System.Text.RegularExpressions.Regex.Replace(
artilce.ContentEn,
"<(.|\n)*?>",String.Empty).Contains(searchPattern)
)
);
}
else
{
return articles.ToList().Where(
artilce => System.Text.RegularExpressions.Regex.Replace(
artilce.ContentAr,
"<(.|\n)*?>",String.Empty).Contains(searchPattern)
)
);
}
}