目前,我有以下内容,是从LDAP中提取的。

// Get context, based on currently logged on user
PrincipalContext domainContext = new PrincipalContext(ContextType.Domain, Environment.UserDomainName);
// Search for the "Domain Users" group, with domain context
GroupPrincipal group = GroupPrincipal.FindByIdentity(domainContext, IdentityType.SamAccountName, "Domain Users");
if(group != null) {
    List<Principal> members = null;
    members = group.GetMembers(false)
        .OrderBy(principal => principal.Name).ToList();
        List<Principal> Principals = members
        .OrderBy(a => a.Name.Split(',')[0])
        .ThenBy(a => a.Name.Split(',')[1])
        .ThenBy(a => a.SamAccountName).ToList();
}


我遇到的问题是,如果我有Doe,John,它可以正常工作,但是如果我有Admin01,它会崩溃,因为找不到第二部分。如何更改它,以便仅一个单词也能正常工作?

最佳答案

首先,我将其投影为复合类型,以便您不会一遍又一遍地拆分。
那我会用一个? :运算符。然后投影回原始类型。

members
  .Select( m => new { member = m, split = m.Name.Split(',') } )
  .OrderBy( a => a.split[0] )
  .ThenBy( a => a.split.Count() > 1 ? a.split[1] : string.Empty )
  .ThenBy( a => a.member.SamAccountNamr )
  .Select( a => a.member );

关于c# - 如何按名字和姓氏排序,然后按SamAccountName排序(不是所有名称都有名字和姓氏)?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18090329/

10-09 05:24