2 Stimmen

Wie teilt man Vor- und Nachnamen aus einem Namen auf, der 4 Wörter hat? in C# und Abfrage verwenden in Mysql

Ich erhalte den Benutzernamen aus einem Listenfeld, teile den Vornamen und den Nachnamen auf und verwende diese Informationen, um ihre Benutzer-ID aus der Datenbank abzurufen.

 string Vorname = li.Value.Split(' ')[0].Trim();
   string Nachname = li.Value.Split(' ')[1].Trim();

Das Schwierige hier für mich ist, wenn der Benutzername Mark Van Harm Jiti lautet, ist der Vorname Mark Van und der Nachname Harm Jiti. Aber mein Code nimmt Mark als Vornamen und Van als Nachnamen. Ich weiß jedoch nicht, welcher der Vorname und welcher der Nachname ist. Ich erhalte einfach den Text Mark Van Harm Jiti aus dem Listenfeld. Wie soll ich meine Abfrage ändern, um die Benutzer-ID für den Benutzer Mark Van Harm Jiti zu erhalten?

string getUserId = "SELECT UserID from tbl_User Where FirstName=@FirstName AND LastName=@LastName";

Ich verwende eine MySQL-Datenbank und es handelt sich um C#-Code.

4voto

jason Punkte 227577

Wenn Sie sicher annehmen können, dass der Nachname das letzte Token ist, können Sie Folgendes tun.

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

Das ist jedoch eine schlechte Annahme (vgl. Luiz Inácio Lula da Silva, sein Nachname ist "da Silva" oder Cristiano Ronaldo dos Santos Aveiro, dessen Nachname "dos Santos Aveiro" ist). Es ist viel besser, nicht in der Position zu sein, in der Sie die Vornamen und Nachnamen aus einem einzigen String unterscheiden müssen.

Aber der schwierige Teil für mich hier ist, wenn der Benutzername Mark Van Harm Jiti ist, ist der Vorname Mark Van und der Nachname Harm Jiti. Aber mein Code nimmt Mark als Vornamen und Van als Nachnamen.

Ja, Beispiele wie dieses bestätigen im Grunde genommen, dass Sie den falschen Ansatz verfolgen, um die Vornamen und Nachnamen aus einem einzelnen String zu bestimmen. Es gibt keine Logik, die manchmal die letzten beiden Tokens auswählt und manchmal nur das letzte Token auswählt (mein Bruder hat zwei zweite Namen, also können Sie nicht die Logik verwenden, immer die letzten beiden Tokens zu verwenden, weil es bei "Mark Van Harm Jiti" richtig ist, aber bei meinem Bruder Namen wäre es falsch).

0voto

Ashok Padmanabhan Punkte 2120

Ich denke, du musst eine Wortanzahl prüfen, um die Anzahl der Wörter in einem Namen zu überprüfen, und dann je nach Anzahl deine Logik verzweigen. Meine Wortzählfunktion ist unten. Ich benutze dies, um die Anzahl der Tags in einem Textfeld zu überprüfen und dann je nach Anzahl entweder zu teilen und einzufügen oder wenn es nur 1 Tag gibt, einzufügen. Ich denke, dass etwas Ähnliches das ist, was du brauchst. Basierend auf der Anzahl aufteilen zwischen Van und Harm.

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

0voto

kevev22 Punkte 3707

Vielleicht gehen Sie das falsch an. Wie wird die ListBox bevölkert? Kann die UserID für jeden ListItem-Wert gespeichert werden, wenn die ListBox bevölkert wird? Wenn Sie es auf diese Weise gemacht haben, könnten Sie einfach auf den SelectedValue der ListBox zugreifen, um die UserID zu erhalten.

0voto

pstrjds Punkte 16062

Ich glaube, Sie können Ihre Abfrage wie folgt anpassen:

string getuserid = "SELECT UserID from tbl_User Where CONCAT(FirstName,' ', LastName)=@userName";

und ändern Sie Ihren Code zu:

string userName = li.Value.Trim();

0voto

Shai Cohen Punkte 5691

Der einzige Weg, an den ich denken kann, um alle Möglichkeiten abzudecken, besteht darin, alle Permutationen zu überprüfen. Die SQL-Anweisung sollte letztendlich so enden:

(FirstName = 'Mark Van Harm' UND LastName = 'Jiti) ODER (FirstName = 'Mark Van' UND LastName = 'Harm Jiti) ODER (FirstName = 'Mark' UND LastName = 'Van Harm Jiti)

Lassen Sie mich wissen, ob dies ein Ansatz ist, für den Sie sich interessieren, und ich werde Ihnen gerne einige Beispielscode bereitstellen

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X