'包含'剂量不适用于弦?

时间:2016-09-05 22:41:13

标签: c# sql entity-framework linq-to-sql linq-to-entities

我正在使用动态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?
}

我上传了表格图片:

enter image description here

有什么问题?

1 个答案:

答案 0 :(得分:1)

string.Contains区分大小写;正如你所注意到的那样,寻找&#34; fish&#34;即使在寻找&#34; Fish&#34;也不会回归&#34; Fisher&#34;将。在.NET中似乎不是一个不区分大小写的版本(即使您可以将不区分大小写的字符串作为选项进行比较)。

作为一种解决方法,您可以在比较之前将两个字符串转换为小写或大写(ToLower / ToUpper)。但是,这可能与某些非拉丁字符存在一些问题。

我认为SQL Server中还有一个排序规则选项,如果你想在数据库级别进行比较,你可以指定字符串的区分大小写。