2011-11-15 23 views
2

我从列表框中获取用户名,我分裂的第一个名字和姓氏,并与我用它来找到DB自己的用户ID,如何从包含4个单词的名称中分割姓和名。在C#和查询使用它在MySQL

string FirstName = li.Value.Split(' ')[0].Trim(); 
    string lastName = li.Value.Split(' ')[1].Trim(); 

但棘手的问题在这里对我来说,当用户名是Mark Van Harm Jiti名字是马克范和姓氏是危害吉蒂。但是我的代码以马克为名,范为姓。但我不知道哪个是名字,哪个是姓氏。我只是从列表框中获得文字Mark Van Harm Jiti。我应该如何改变我的查询,以便我得到的用户ID用户马克货车危害鸡啼

string getuserid = "SELECT UserID from tbl_User Where [email protected] AND [email protected]"; 

我使用MySQL数据库,这是C#代码。

+0

什么用的名字三个或五个词,或更多?关于姓氏是三个单词的四字名称(“Georges de la Tour”)呢? – phoog

+0

可能的重复http://stackoverflow.com/q/5596706/385844 – phoog

回答

0

我认为你需要做一个字数来检查名称中的字数,然后根据数量来分支你的逻辑。我的字数功能如下。我使用它来检查文本字段中的标签数量,然后对数字进行拆分和插入,或者仅插入一个标签。我觉得类似的东西就是你需要的东西。基于Van和Harm之间的数量分配。

 Public Shared Function WordCount(ByVal s As String) As Int32 
     Dim collection As MatchCollection = Regex.Matches(s, "[\S]+") 
     Return collection.Count 
    End Function 
+0

从tbl_user选择用户标识符Concat(Firstname,'',lastname)='Mark Van Harm Jiti';你认为这是一个很好的解决方案 – John

4

如果您可以安全地假定姓氏是最后一个标记,则可以执行以下操作。

string[] tokens = li.Value.Split(' '); 
string firstName = tokens[0].Trim(); 
string lastName = tokens[tokens.Length - 1].Trim(); 

然而,这是一个坏的假设(参见路易斯·伊纳西奥·卢拉·达席尔瓦,他的姓是“席尔瓦”或克里斯蒂亚诺罗纳尔多,其姓“多斯桑托斯阿维罗”)。不要处于必须从单个字符串中辨别姓和名的位置。

但这里对我来说很棘手的部分是,当用户名是马克范哈姆吉蒂的名字是马克范和姓氏是害吉蒂。但是我的代码以马克为名,范为姓。

是啊,看到这样的例子,基本上证实你在尝试确定单个字符串的名字和姓氏时有错误的方法。没有任何逻辑有时会挑选出最后两个令牌,有时只挑出最后一个令牌(我的兄弟有两个中间名,所以你不能使用总是拿走最后两个令牌的逻辑,因为“Mark Van Harm基蒂“这是对的,但在我的兄弟的名字,这将是错误的)。

+0

是的,这很有道理,谢谢 – John

+0

从tbl_user选择用户名,其中Concat(Firstname,'',lastname)='Mark Van Harm Jiti';你认为这是一个很好的解决方案 – John

+0

“没有逻辑有时会挑出最后两个标记,有时只挑出最后一个标记” - 但是有逻辑可以尝试所有可能性。请看我的答案。 –

0

也许你正在对此采取不正确的做法。 ListBox如何填充?当ListBox被填充时,是否可以为每个ListItem值存储用户ID?如果你这样做了,你可以访问ListBox的SelectedValue来获得UserID。

0

我相信你可以调整你的查询到这一点:

string getuserid = "SELECT UserID from tbl_User Where CONCAT(FirstName,' ', LastName)[email protected]"; 

和你的代码更改为:

string userName = li.Value.Trim(); 
0

我能想到的,以涵盖所有可能的唯一方法是检查所有排列。SQL语句应该最终落得这样的:

(名字=“马克·范·危害”和姓氏=“鸡啼)OR(名字= ‘马克凡’和姓氏=”危害鸡啼)OR(名字= “马克” AND 姓氏=“范危害鸡啼)

让我知道这是一个方法,你有兴趣,我会很乐意提供一些示例代码

相关问题