'Contains' 不适用于字符串?
'Contains' dose not works with string?
我正在使用动态 linq 来解析某些条件。我写了存储过程,想动态过滤。
这是我的程序:
;WITH cte
AS
(
SELECT
ID
,[NO]
,Firstname
,Lastname
,PersonalNO
,ReferanceID
,CAST('' AS VARCHAR(MAX)) AS ReferanceNO
FROM dbo.Employees WHERE ReferanceID IS NULL
UNION ALL
SELECT
c.ID
,c.[NO]
,c.Firstname
,c.Lastname
,c.PersonalNO
,c.ReferanceID
,CASE
WHEN ct.ReferanceNO = ''
THEN CAST(ct.[NO] AS VARCHAR(MAX))
ELSE CAST(ct.[NO] AS VARCHAR(MAX))
END
FROM dbo.Employees c
INNER JOIN cte ct ON ct.ID = c.ReferanceID
)
SELECT * FROM cte
在 C# 中我调用了这个过程;
public List<Employees> GetEmployees(string searchValue, int skip, int pageSize, string sortColumn, string sortColumnDir)
{
var query = DB.sp_GetConsultants().ToList();
var totalRecords = query.Count;
query = query.Where(searchValue).ToList(); // if the searchValue is value
//"PersonalNO.Contains(\"15\")" it filters, with this kind of value
//"Lastname.Contains(\"fish\")" it dose not, but with "Fish" it does. Is the matter with uppercase?
}
我上传了table图片:
问题是什么?
string.Contains
区分大小写;如您所见,搜索 "fish" 不会 return "Fisher",尽管搜索 "Fish" 会。 .NET 中似乎没有不区分大小写的版本(即使您可以选择不区分大小写地比较字符串)。
作为解决方法,您可以在比较之前将两个字符串都转换为小写或大写 (ToLower
/ ToUpper
)。但是,这可能对某些非拉丁字符有一些问题。
我认为 SQL 服务器中还有一个排序规则选项,如果您想在数据库级别进行比较,可以让您指定字符串的大小写敏感度。
我正在使用动态 linq 来解析某些条件。我写了存储过程,想动态过滤。
这是我的程序:
;WITH cte
AS
(
SELECT
ID
,[NO]
,Firstname
,Lastname
,PersonalNO
,ReferanceID
,CAST('' AS VARCHAR(MAX)) AS ReferanceNO
FROM dbo.Employees WHERE ReferanceID IS NULL
UNION ALL
SELECT
c.ID
,c.[NO]
,c.Firstname
,c.Lastname
,c.PersonalNO
,c.ReferanceID
,CASE
WHEN ct.ReferanceNO = ''
THEN CAST(ct.[NO] AS VARCHAR(MAX))
ELSE CAST(ct.[NO] AS VARCHAR(MAX))
END
FROM dbo.Employees c
INNER JOIN cte ct ON ct.ID = c.ReferanceID
)
SELECT * FROM cte
在 C# 中我调用了这个过程;
public List<Employees> GetEmployees(string searchValue, int skip, int pageSize, string sortColumn, string sortColumnDir)
{
var query = DB.sp_GetConsultants().ToList();
var totalRecords = query.Count;
query = query.Where(searchValue).ToList(); // if the searchValue is value
//"PersonalNO.Contains(\"15\")" it filters, with this kind of value
//"Lastname.Contains(\"fish\")" it dose not, but with "Fish" it does. Is the matter with uppercase?
}
我上传了table图片:
问题是什么?
string.Contains
区分大小写;如您所见,搜索 "fish" 不会 return "Fisher",尽管搜索 "Fish" 会。 .NET 中似乎没有不区分大小写的版本(即使您可以选择不区分大小写地比较字符串)。
作为解决方法,您可以在比较之前将两个字符串都转换为小写或大写 (ToLower
/ ToUpper
)。但是,这可能对某些非拉丁字符有一些问题。
我认为 SQL 服务器中还有一个排序规则选项,如果您想在数据库级别进行比较,可以让您指定字符串的大小写敏感度。