'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 服务器中还有一个排序规则选项,如果您想在数据库级别进行比较,可以让您指定字符串的大小写敏感度。