public static Type GetObjectKeyType(this XPObjectSpace objectSpace, Type objectType) { Type result = null; var xpClassInfo = objectSpace.FindXPClassInfo(objectType); if (xpClassInfo != null) { Type queryableType = xpClassInfo.ClassType; if (queryableType.IsInterface) { queryableType = PersistentInterfaceHelper.GetPersistentInterfaceDataType(queryableType); xpClassInfo = objectSpace.Session.GetClassInfo(queryableType); } XPMemberInfo keyMember = xpClassInfo.KeyProperty; if (keyMember != null) { if (!keyMember.IsStruct) { if (keyMember.ReferenceType != null) { result = objectSpace.GetObjectKeyType(keyMember.ReferenceType.ClassType); } else { return(keyMember.MemberType); } } else { throw new NotImplementedException(); } } } return(result); }