private static void UpdateOrInsert(
            Context context,
            LdapEntry entry,
            ParameterAccessor.Parts.Ldap ldap,
            DateTime synchronizedTime)
        {
            var deptCode = entry.Property(
                context: context,
                name: ldap.LdapDeptCode,
                pattern: ldap.LdapDeptCodePattern);
            var deptName = entry.Property(
                context: context,
                name: ldap.LdapDeptName,
                pattern: ldap.LdapDeptNamePattern);
            var userCode = entry.Property(
                context: context,
                name: ldap.LdapUserCode,
                pattern: ldap.LdapUserCodePattern);
            var loginId = LoginId(
                context: context,
                ldap: ldap,
                entry: entry);
            var name = Name(
                context: context,
                loginId: loginId,
                entry: entry,
                ldap: ldap);
            var mailAddress = entry.Property(
                context: context,
                name: ldap.LdapMailAddress,
                pattern: ldap.LdapMailAddressPattern);
            var attributes = ldap.LdapExtendedAttributes?
                             .Select(attribute =>
                                     new KeyValuePair <LdapExtendedAttribute, string>(
                                         attribute,
                                         entry.Property(
                                             context: context,
                                             name: attribute.Name,
                                             pattern: attribute.Pattern)))
                             .ToList();

            UpdateOrInsert(
                context: context,
                loginId: loginId,
                deptCode: deptCode,
                deptName: deptName,
                userCode: userCode,
                name: name,
                mailAddress: mailAddress,
                attributes: attributes,
                ldap: ldap,
                synchronizedTime: synchronizedTime);
        }
 public static string NetBiosName(
     Context context, LdapEntry entry, ParameterAccessor.Parts.Ldap ldap)
 {
     return(ldap.NetBiosDomainName + "\\" + entry.Property(
                context: context,
                name: "sAMAccountName"));
 }
        private static string Name(
            Context context,
            string loginId,
            LdapEntry entry,
            ParameterAccessor.Parts.Ldap ldap)
        {
            var name = "{0} {1}".Params(
                entry.Property(
                    context: context,
                    name: ldap.LdapLastName,
                    pattern: ldap.LdapLastNamePattern),
                entry.Property(
                    context: context,
                    name: ldap.LdapFirstName,
                    pattern: ldap.LdapFirstNamePattern));

            return(name != " "
                ? name.Trim()
                : loginId);
        }
        private static string LoginId(
            Context context,
            ParameterAccessor.Parts.Ldap ldap,
            LdapEntry entry)
        {
            var loginId = Authentications.Windows(context: context)
                ? NetBiosName(
                context: context,
                entry: entry,
                ldap: ldap)
                : entry.Property(
                context: context,
                name: ldap.LdapSearchProperty);

            return(loginId);
        }