2016-09-05 7 views
-1

私は動的linqを使用していくつかの条件を解析しています。私はストアドプロシージャを書き、それを動的にフィルタリングしたい。'Contains'は文字列では機能しません。

これは私の手順です:

;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

問題は何ですか?

+0

'query'リスト全体の内容を表示する(またはデバッガを使って列挙する)とどうなりますか?おそらく何かがあなたのストアドプロシージャに間違っていて、それはJohn Fisherを含めていないでしょう? – ekolis

+0

私はお詫び申し上げます。 – www1986

答えて

1

string.Containsは大文字と小文字が区別されます。あなたが気づいたように、「魚」を検索しても「フィッシャー」は返されません。 .NETでは大文字と小文字を区別しないバージョンがあるようには見えません(オプションとして文字列の大文字と小文字を区別して比較することはできますが)。

回避策として、比較する前に、両方の文字列を小文字または大文字(ToLower/ToUpper)に変換することができます。ただし、これにはラテン文字ではない問題がいくつかあります。

データベースレベルで比較を行う場合は、文字列の大文字と小文字の区別を指定できる照合オプションもSQL Serverにあると思います。

+0

私は情報をより正確にしたいと思います。この場合、string.Containsはプロシージャの最後に.ToList()を追加したために大文字と小文字が区別されます。このクエリを書き直すと:var query = DB.sp_GetConsultants()。AsQueryabla()は大文字と小文字を区別しません。そうですか?そしてもし私が、なぜ? – www1986

+0

私はLINQ to SQLについてよく知っているわけではありませんが、AsQueryable()はデータベース内で検索を行うと思います。おそらくデータベース照合は大文字小文字を区別しないように設定されていますか? – ekolis

関連する問題