C# Linq检查带有逗号的列中的唯一值

C# Linq检查带有逗号的列中的唯一值,c#,linq,C#,Linq,我有一个表,我在其中以模式Firstname,Lastname保存名称 但是,当用户输入该值时,名称之间的空格可能不规则 那么如何使用Linq检查列值是否唯一呢 string name_input = "a , b"; if (context.TableRankHolders.Any(q => q.Name == name_input)) { //name exists } 我试图做的是通过删除逗号前后所有不需要的空格,将输入字符串格式化为严格的“a,b”模式,如示例所示 在数据

我有一个表,我在其中以模式Firstname,Lastname保存名称

但是,当用户输入该值时,名称之间的空格可能不规则 那么如何使用Linq检查列值是否唯一呢

 string name_input = "a , b"; 
if (context.TableRankHolders.Any(q => q.Name == name_input))
{
  //name exists
}
我试图做的是通过删除逗号前后所有不需要的空格,将输入字符串格式化为严格的“a,b”模式,如示例所示

在数据库中,名称值的格式不同,比如逗号之间可能没有空格,或者逗号之间有更多空格,比如“a,b”/“a,b”/“a,b”/“a,b”等 现在使用LINQ查询进行检查,但是如何根据列中的逗号设置要拆分的名称格式

唯一的共同点是必须有,现在,我想方法是这样的
拆分,并检查单行的第0部分和第1部分是否存在于db中

假设名称中没有空格,则可以使用简单的:

context.TableRankHolders.Any(q => q.Name.Replace(" ", "") == name_input.Replace(" ", ""))
可能会在此过程中检查
null
s。如果希望名称中有空格,则应使用以下内容:

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))

假设名称中没有空格,则可以使用简单的:

context.TableRankHolders.Any(q => q.Name.Replace(" ", "") == name_input.Replace(" ", ""))
可能会在此过程中检查
null
s。如果希望名称中有空格,则应使用以下内容:

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))

formatted\u name
中的值是多少请参见Description中的编辑我不知道您的上下文,但将名字+姓氏作为唯一字段似乎并不常见。两个人的名字可能很容易相同。也就是说,我个人会删除所有的空格,然后比较有一些字符,一个逗号,然后还有一些字符。您永远不知道用户将输入什么。@msanz Yes u是正确的进行此验证的目的是防止再次错误地输入同一个人的详细信息。如果存在相同的名称,客户端将对名称进行一些调整,如Jr或Sr等,以使其唯一。@msanz将只显示单独的字段。我将停止请求
,只允许他们输入自己想要的姓名。
格式化的\u name
中的值是多少?请参见描述中的编辑我不知道您的上下文,但将名字+姓氏作为唯一字段似乎并不常见。两个人的名字可能很容易相同。也就是说,我个人会删除所有的空格,然后比较有一些字符,一个逗号,然后还有一些字符。您永远不知道用户将输入什么。@msanz Yes u是正确的进行此验证的目的是防止再次错误地输入同一个人的详细信息。如果存在相同的名称,客户端将对名称进行一些调整,如Jr或Sr等,以使其唯一。@msanz将只显示单独的字段。我会完全停止请求
,只让他们按照自己的意愿输入自己的名字。无论如何,我会将字符串格式作为LINQ where子句的一部分。如果我们可以这样做,我可以做一些类似的string.format(“{0},{1}”、name.split(,)[0]、name.split(,)[1])您也可以这样做(请记住,这里的关键部分是
Trim
调用),或者只是在
Any
调用中内联这个函数(但这在我看来不是那么可读):
context.TableRankHolders.Any(q=>q.split(,)。选择(w=>w.Trim(“”)).SequenceEqual(name_input.Split(‘,’).Select(w=>w.Trim(“”))
无论如何都可以将字符串格式作为LINQ where子句的一部分。如果可以这样做,我可以制作类似的字符串。Format({0},{1}),name.Split(,)[0],name.Split(,)[1])您也可以这样做(请记住,这里的关键部分是
Trim
调用)或者只在
Any
调用中内联此函数(但这在我看来不是那么可读):
context.TableRankHolders.Any(q=>q.Split(',')。选择(w=>w.Trim(')).SequenceEqual(name\u input.Split(',')。选择(w=>w.Trim('))