2016-03-20 19 views
1

私が持っているSQL Linqクエリに問題があります。入力テキストボックスに人名を入力すると、その名前を含む人物のリストを表示する必要があるが、私が持つ問題は次のとおりであるというクエリがあります。 人名はそのように見えますjose ou josé。それは同じ名前ですが、èのないものがあります。 I・ライトホセクエリはJoseとJoseとその逆を持っているすべての人々を取得するときに私のクエリSql Linq検索クエリ

var person = (from p in context.Person 
       where p.Name.Contains(personName) || p.Name.StartsWith(personName) || p.Name.EndsWith(personName)        
          select p).OrderBy(m => m.Name).ToPagedList(page, 10); 
    return person; 

はアイデアにあります。もし私が気をつけていれば、クエリはその名前の中にジョスを持つ人々だけを返すだけで、全面的にはéを持つ人々を返すわけではありません。どのように私はこの問題を解決することができるか知っていますか?

if (String.Compare("Jose", "José", CultureInfo.CurrentCulture, CompareOptions.IgnoreNonSpace) == 0) 
{ 
    // both strings are equal 
} 

あなたが持っているでしょう:

+0

に説明されていますBtw、 'p.Name.Contains(personName)'は 'StartsWith'と' EndsWidth'を処理するので、それらの必要はありません。あなたの主な質問は、データベースの観点からは、例の名前が異なっていますか? –

+0

こんにちは、名前は同じですが、一方はéを持っています。私はéを持っている、または持っていない名前を返さなければなりません。ありがとうございました –

答えて

0

あなたは(そして、あなたは、単に代わりにInvariantCultureを使用することができ、あなたの現在のカルチャを使用したくない場合)は、現在の文化の中での使用は、次のようになりString.Compareを、使用することができますありがとう直接このようなあなたのLINQクエリには、このチェックを実装する:

var person = (from p in context.Person 
       where String.Compare(p.Name, personName, CultureInfo.CurrentCulture, CompareOptions.IgnoreNonSpace) == 0       
          select p).OrderBy(m => m.Name).ToPagedList(page, 10); 
return person; 

これは、すべての非常によくthis answer.

+0

こんにちは私はあなたのクエリを試みましたが、それはnotyhingを返しません。 –

+0

クエリを試してデバッグして、実際に何が起こっているか見てみましょう。 – Peroxy

+0

これは、WHERE [t0]。[Name] = @ p0とlinq2sqlの単純な変換で、Compareのすべてのオプションを効果的に無視します。 –