public static async Task <IQueryable <TModel> > GetQueryAsync <TModel, TData>(this IQueryable <TData> query, IMapper mapper, ODataQueryOptions <TModel> options, QuerySettings querySettings = null)
            where TModel : class
        {
            var expansions = options.SelectExpand.GetExpansions(typeof(TModel));
            List <Expression <Func <TModel, object> > > includeExpressions = expansions.Select(list => new List <Expansion>(list)).BuildIncludes <TModel>
                                                                             (
                options.SelectExpand.GetSelects()
                                                                             )
                                                                             .ToList();

            Expression <Func <TModel, bool> > filter = options.Filter.ToFilterExpression <TModel>(querySettings?.ODataSettings?.HandleNullPropagation ?? HandleNullPropagationOption.False);
            Expression <Func <IQueryable <TModel>, IQueryable <TModel> > > queryableExpression = options.GetQueryableExpression();
            Expression <Func <IQueryable <TModel>, long> > countExpression = LinqExtensions.GetCountExpression <TModel>(filter);

            options.AddExpandOptionsResult();
            if (options.Count?.Value == true)
            {
                options.AddCountOptionsResult <TModel, TData>(await query.QueryAsync(mapper, countExpression));
            }

            IQueryable <TModel> queryable = await query.GetQueryAsync(mapper, filter, queryableExpression, includeExpressions, querySettings?.ProjectionSettings);

            return(queryable.UpdateQueryableExpression(expansions));
        }