我正在使用动态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?
}
我上传了表格图片:
有什么问题?
答案 0 :(得分:1)
string.Contains
区分大小写;正如你所注意到的那样,寻找&#34; fish&#34;即使在寻找&#34; Fish&#34;也不会回归&#34; Fisher&#34;将。在.NET中似乎不是一个不区分大小写的版本(即使您可以将不区分大小写的字符串作为选项进行比较)。
作为一种解决方法,您可以在比较之前将两个字符串转换为小写或大写(ToLower
/ ToUpper
)。但是,这可能与某些非拉丁字符存在一些问题。
我认为SQL Server中还有一个排序规则选项,如果你想在数据库级别进行比较,你可以指定字符串的区分大小写。