public IQueryable <TSource> AdminSeachConditions <TSource, TSearch>(IQueryable <TSource> query, TSearch searchModel, CurrentUserViewModel currentUser = null) where TSource : BaseEntity where TSearch : BaseSearchModel
        {
            currentUser = currentUser ?? CurrentUser();
            if (currentUser == null)
            {
                return(query);
            }

            if (searchModel == null)
            {
                return(query);
            }

            if (!string.IsNullOrEmpty(searchModel.CreationDateFrom))
            {
                var dateTime = searchModel.CreationDateFrom.PersianToGregorian().ToString("yyyy/MM/dd", new CultureInfo("en-US"));
                query = query.Where(x => CustomDbFunctions.DateDiff("DAY", dateTime, CustomDbFunctions.JsonValue(x.Audit, "$[0].d")) <= 0);
            }

            if (!string.IsNullOrEmpty(searchModel.CreationDateTo))
            {
                var dateTime = searchModel.CreationDateTo.PersianToGregorian().ToString("yyyy/MM/dd", new CultureInfo("en-US"));
                query = query.Where(x => CustomDbFunctions.DateDiff("DAY", dateTime, CustomDbFunctions.JsonValue(x.Audit, "$[0].d")) >= 0);
            }

            if (currentUser.Role == Role.SuperAdmin || currentUser.Role == Role.Admin)
            {
                if (string.IsNullOrEmpty(searchModel.CreatorId))
                {
                    return(query);
                }

                query = query.Where(entity => CustomDbFunctions.JsonValue(entity.Audit, "$[0].i") == searchModel.CreatorId);
            }

            return(query);
        }