更新
当'\'是转义助手%[]_
问题
虽然我经常搜索,但在堆栈溢出时我找不到与下列内容完全匹配的问题。
我有一个名为Log_Description的数据库列。它有两个记录。
1)“样本%值记录”
2)“免费记录样本”
我正在使用SQL命令和设置参数,如下所示
commandText = commandText + “Log_Description LIKE @Log_Description”;
command.Parameters.AddwithValue(“@Log_Description”, “%”+obj. LogDescription+”%”);
假设用户输入“%”作为txtLogDescription文本框的搜索参数,我只需要显示第一条记录。但目前它正在显示两个记录。
注意:我无法阻止用户输入“%”作为输入
注意:我使用SQL Server作为数据库
编辑:
我现在使用的解决方案是Escaping the escape character does not work – SQL LIKE Operator
private static string CustomFormat(string input)
{
input = input.Replace(@"\", @"\\");
input = input.Replace(@"%", @"\%");
input = input.Replace(@"[", @"\[");
input = input.Replace(@"]", @"\]");
input = input.Replace(@"_", @"\_");
return input;
}
LINQ 方法(性能命中)低于
Collection<Log> resultLogs = null;
if (!String.IsNullOrEmpty(logSearch.LogDescription))
{
resultLogs = new Collection<Log>();
var results = from o in logs where o.LogDescription.Contains(logSearch.LogDescription) select o;
if (results != null)
{
foreach (var log in results)
{
resultLogs.Add((Log) log);
}
}
}
else
{
resultLogs = logs;
}
答案 0 :(得分:1)
至于逃避%
,请参阅Tommy Grovnes对该问题的评论。
如果您可以使用List<T>
代替Collection<T>
(请参阅here),则可以更简洁地编写:
var descr = logSearch.logDescription;
var results = (
from o in logs
where String.IsNullOrEmpty(descr) ||
o.LogDescription.Contains(descr)
select o
).ToList();
如果仍需要Collection<T>
,可以在Collection构造函数中包装LINQ查询的结果:
var results = new Collection<Log>((
from o in logs
where String.IsNullOrEmpty(descr) ||
o.LogDescription.Contains(descr)
select o
).ToList());