public static object SelectFields(this Envelop.Queryable queryable, object response)
    {
        if (queryable.Fields?.Any() ?? false)
        {
            var jsonResult = JsonConvert.SerializeObject(response, new JsonSerializerSettings
            {
                ContractResolver = new DefaultContractResolver
                {
                    NamingStrategy = new CamelCaseNamingStrategy()
                }
            });

            var jToken = JToken.Parse(jsonResult);

            if (jToken is JObject)
            {
                var jObject = JsonConvert.DeserializeObject <JObject>(jsonResult);

                foreach (var fieldToRemove in queryable.Fields)
                {
                    jObject.Property(fieldToRemove).Remove();
                }

                return(jObject);
            }
            else
            {
                var jArray    = JsonConvert.DeserializeObject <JArray>(jsonResult);
                var newJArray = new JArray();


                jArray.Select(item => (JObject)item)
                .ToList()
                .ForEach(field =>
                {
                    var newJObject = new JObject();
                    queryable.Fields.ForEach(fieldToAdd =>
                    {
                        var jToken = field.SelectToken(fieldToAdd);

                        if (fieldToAdd.Contains('.'))
                        {
                            BuildJOBject(fieldToAdd.Split("."), jToken, newJObject);
                        }
                        else
                        {
                            newJObject.Add(fieldToAdd, jToken);
                        }
                    });
                    newJArray.Add(newJObject);
                });

                return(newJArray);
            }
        }

        return(default);
 public static void Bind(this Envelop.Queryable queryableScoped, Envelop.Queryable queryable)
 {
     queryableScoped.Filter = queryable.Filter;
     queryableScoped.Page   = queryable.Page;
     queryableScoped.Fields = queryable.Fields;
     queryableScoped.Sort   = queryable.Sort;
     queryableScoped.Search = queryable.Search;
     queryableScoped.Wrap   = queryable.Wrap;
 }
 public OperatorDomainService(IOperatorService operatorService, INotificationContext notificationContext, Envelop.Queryable queryable)
 => (_operatorService, _notificationContext, _queryable) = (operatorService, notificationContext, queryable);