2016-11-04 8 views
1

私はパターンファーストネームで名前を保存していますテーブルを持って、姓LINQのは、コンマ

でカラムからユニークな値をチェックしかし、ユーザー入力この値ながら、名前の間にスペースは通常の が、どのようにすることができないかもしれません私は例のようにコンマの前後にすべての不要なスペースを削除することで、「A、B」の厳格なパターンに列の値は、私がやろうとしています何のLINQ

string name_input = "a , b"; 
if (context.TableRankHolders.Any(q => q.Name == name_input)) 
{ 
    //name exists 
} 

を使用してユニークであることは形式の入力文字列で、チェック

データベースでは、名前va b、a、b、/ a、bなどのコンマの間にスペースを入れないでください。 LINQクエリを使用してチェックします。どのように私は列からカンマに基づいて分割する名前をフォーマットすることができます

共通のものが存在しなければなりません、存在しなければなりませんと 分割され、チェック部分0と部分1が存在するかどうか単一の行

+0

'formatted_name' –

+0

内の値であるものを私はあなたの状況を知らないが、それはdoesnの説明 –

+0

で編集を参照してください。独自のフィールドとして名字+姓を持つのはとても普通です。 2人の人は簡単に同じ名前を付けられます。つまり、私は個人的にすべての空白を取り除き、いくつかの文字、コンマ、そしていくつかの文字を比較したいと思います。あなたはユーザーが何を入力するか決して分かりません。 – Petaflop

答えて

0

名はあなたがシンプルで行くことができるそれらにスペースを持っていないと仮定:

context.TableRankHolders.Any(q => q.Name.Replace(" ", "") == name_input.Replace(" ", "")) 

はおそらくをチェックします途中でになります。あなたは名前があなたがの線に沿って何かに行くべきスペース持っていることが予想される場合:

bool CheckNames(string a, string b) 
{ 
    string[] splitA = a.Split(',').Select(q => q.Trim(' ')).ToArray(); 
    string[] splitB = b.Split(',').Select(q => q.Trim(' ')).ToArray(); 
    return splitA.SequenceEqual(splitB); 
} 

... 
context.TableRankHolders.Any(q => CheckNames(q.Name, name_input)) 
+0

とにかくLINQ where句の一部としてString Formatを作成します。私たちがそうすることができるなら、私は同様のstring.format( "{0}、{1}"、name.split(、)[0]、name.split(、)[1]) –

+0

を行うことができます(ここで重要な部分は 'Trim'呼び出しです)、' Any'呼び出しでこの関数をインライン化するだけです(ただし、これは読み取り可能なIMOではありません):context.TableRankHolders.Any(q => q。 SequenceEqual(name_input.Split( '、'))を選択します(w => w.Trim( '')))) ' – slawekwin