2016-11-04 57 views
1

我有我在哪里的模式名字保存名称的表,姓氏的LINQ从列检查独特的价值与逗号

但是当用户输入该值名称之间的空间可能不是正规 因此,如何能我检查使用LINQ

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

什么,我试图做的是格式的输入字符串的“A,b”严格的图案列值是唯一的例子

在逗号前后删除所有不必要的空间,如

在数据库中Name va lue可以是不同的格式,例如逗号之间没有空格或逗号之间有更多的空格,比如“a,b”/“a,b”/“a,b”/“a,b”等。 现在使用LINQ查询来检查,但我如何格式名称分割基于从列的逗号

唯一常见的是必须存在,我想办法就像 分裂,并检查部分0和第1部分存在或不在数据库为一个单列

+0

这将是在'formatted_name' –

+0

请参阅编辑在描述 –

+0

我不知道你的上下文中的价值,但它不通常不会将名字+姓氏作为一个独特的领域。两个人可能很容易命名相同。也就是说,我亲自删除所有的空白,并比较有一些字符,一个逗号,然后一些字符。你永远不知道用户会输入什么。 – Petaflop

回答

0

假设名称没有空格的,你可以用简单的去:

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

可能检查null一路走来。如果你希望的名字有空格,你应该沿着线的东西去:

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(“{0},{1}”,name.split(,)[0],name.split(,)[1]) –

+0

你也可以做(请记住,这里的关键部分是'Trim'调用),或者只是在Any调用中内联这个函数(但这不是可读的IMO):'context.TableRankHolders.Any(q => q。 Split(',')。Select(w => w.Trim(''))。SequenceEqual(name_input.Split(',')。Select(w => w.Trim(''))))' – slawekwin