C# 带有字符串的LINQ to SQL中的问题包含退格-C的转义序列#
我在SQL Server中有一个表,其中包含以下模型和值:C# 带有字符串的LINQ to SQL中的问题包含退格-C的转义序列#,c#,sql-server,entity-framework,linq,escaping,C#,Sql Server,Entity Framework,Linq,Escaping,我在SQL Server中有一个表,其中包含以下模型和值: public class Employee { public int EmpId { get; set; } public string Name { get; set; } } 它包含以下值 EmpId Name ______________________________ 1 A 2 B 3 C 使用LINQ中的.Contains(
public class Employee
{
public int EmpId { get; set; }
public string Name { get; set; }
}
它包含以下值
EmpId Name
______________________________
1 A
2 B
3 C
使用LINQ中的.Contains(“A\b”)
获取记录的C代码-搜索字符串包含转义字符\b
退格
public class EmployeeService {
public List<Employee> GetEmployee() {
return dbContext.Employee.Where(m => m.Name.Contains("A\b")).ToList();
}
}
我无法获得匹配的记录。请帮助我
上述SQL语句的预期匹配结果为
EmpId Name
______________________________
1 A
我想你应该用这个:
public class EmployeeService {
public List<Employee> GetEmployee() {
return dbContext.Employee.Where(m => m.Name.Contains("A")).ToList();
}
}
公共类员工服务{
公共列表GetEmployee(){
返回dbContext.Employee.Where(m=>m.Name.Contains(“A”)).ToList();
}
}
为什么找不到匹配项?
因为没有。您的条目都不包含“A\b”
。虽然有一个包含“A”
,但这不是您在.Contains(“A\b”)
中要求的
那么,为什么对.Contains(“A”)
和.Contains(“A\b”)
得到相同的sql语句?
我想你没有。我认为它们的显示方式是相同的,因为
\b
无法打印。字符并不总是可见的,但它就在那里。您可能无法在SQL编辑器中看到它,但在其他显示中,搜索谓词将如下所示:
LIKE '%A□%'
要解决此问题,请在将搜索字符串发送到数据库之前从搜索字符串中删除不可打印的字符:
var searchString = new string("A\b".Where(c => c > 31).ToArray());
return dbContext.Employee.Where(m => m.Name.Contains(searchString)).ToList();
您预期的结果是什么?根据查询和给定的数据,什么应该是正确的/实际的结果?在
中包含的\b
是什么(“A\b”)代码>?@Mastero对不起,我不清楚。我知道它是什么,但不知道你在这里用它干什么。为什么不仅仅是包含(“A”)代码>?这有区别吗?您如何验证生成的SQL语句是相同的?当我运行查询时,字符\b
包含在生成的SQL中(字符8,打印出来时自然不可见),这解释了为什么查询没有返回任何内容,但查询看起来是一样的。它不是字母,这是一个转义序列\b-Backspace
您希望查询返回什么?我正在获取带有尾随转义序列\b
的搜索字符串,字符串a\b
的结果是a
。但是我不知道为什么检索结果失败。为什么要使用\b?有什么问题吗:m.Name.Contains(“A”)?好吧,我不知道你的答案,希望很快会有人帮你;)
var searchString = new string("A\b".Where(c => c > 31).ToArray());
return dbContext.Employee.Where(m => m.Name.Contains(searchString)).ToList();