private static IQueryable <TRoot> CallChildJoin <TRoot, TFrom>(LocalCrmDatabaseInfo info, IQueryable <TRoot> query, LinkEntity fromEntity, LinkEntity link)
            where TRoot : Entity
            where TFrom : Entity
        {
            var tRoot = typeof(TRoot);
            var tTo   = GetType(info, link.LinkToEntityName);

            return((IQueryable <TRoot>)GenericMethodCaller.InvokeLocalCrmDatabaseStaticMultiGenericMethod(
                       info,
                       nameof(ChildJoin),
                       BindingFlags.NonPublic,
                       new object[] { tRoot, typeof(TFrom), tTo },
                       info, query, fromEntity, link));
        }
        private static IQueryable <T> CallJoin <T>(LocalCrmDatabaseInfo info, IQueryable <T> query, LinkEntity link) where T : Entity
        {
            try
            {
                var tFrom = typeof(T);
                var tTo   = GetType(info, link.LinkToEntityName);
                return((IQueryable <T>)GenericMethodCaller.InvokeLocalCrmDatabaseStaticMultiGenericMethod(
                           info,
                           nameof(Join),
                           BindingFlags.NonPublic,
                           new object[] { tFrom, tTo },
                           info, query, link));
            }
            catch (TargetInvocationException ex)
            {
                if (ex.InnerException == null)
                {
                    throw;
                }

                throw ex.InnerException;
            }
        }