I'd probably do this if I knew for sure the string would always be First.Last names, with or without spaces.
username = username.Replace(" ", "");
string[] FirstLast = username.Split(new char[] { '.' }, StringSplitOptions.RemoveEmptyEntries);
search.Filter = "(sn=" + FirstLast[1] + ") & (givenname=" + FirstLast[0] + ")";
Not much different...just a different order, mainly.
BUT, if the string would
always be First.Last (with or without spaces), and the common name format is First.Last, why go through all the trouble?
username = username.Replace(" ","");
search.Filter = "(cn=" + username + ")";
D'oh! Filter syntax is wrong...sorry. For multiple criteria, do this:
filter = "(&(sn="+FirstLast[1]+")(givenName=" + FirstLast[0] + "))";
or, from your orginal:
search.Filter = "(&(sn=" + username + ")(givenname=" + Fname + "));