public DataAdapterCud(DataAdapterRead dataAdapterRead, DatabaseOperations databaseOperations, Dialect dialect, MetadataSrv.Metadata metadataSrv)
 {
     this.dataAdapterRead    = dataAdapterRead;
     this.databaseOperations = databaseOperations;
     this.dialect            = dialect;
     this.metadataSrv        = metadataSrv;
 }
 public EntitySet(Type derivedEntityType, Dictionary <string, IEntitySet <IDerivedEntity> > entitySets, MetadataSrv.Metadata metadataSrv)
 {
     this.derivedEntityType = derivedEntityType;
     this.entityTypeName    = derivedEntityType.Name;
     this.entitySets        = entitySets;
     this.metadataSrv       = metadataSrv;
     this.key   = metadataSrv.EntityTypes[this.entityTypeName].Key;
     this.Items = new List <IDerivedEntity>();
 }
 public static string FixEntitySetNameCase(string entitySetName, MetadataSrv.Metadata metadataSrv)
 {
     foreach (var prop in metadataSrv.EntityTypes)
     {
         if (metadataSrv.EntityTypes[prop.Key].EntitySetName.ToLower() == entitySetName.ToLower())
         {
             return(metadataSrv.EntityTypes[prop.Key].EntitySetName);
         }
     }
     throw new Exception("Invalid entitySetName");
 }
Пример #4
0
 public void Dispose()
 {
     // se va apela inainte de incetarea utilizarii obiectului
     // pentru a evita aparitia de memory leaks si a usura activitatea GC-ului
     foreach (var entitySet in this.entitySets)
     {
         var entitySetValue = entitySet.Value;
         entitySetValue.Dispose();
     }
     this.entitySets  = null;
     this.metadataSrv = null;
 }
        public static bool ValidDtoKey(string entityTypeName, Dto dto, MetadataSrv.Metadata metadataSrv)
        {
            var keyNames = metadataSrv.EntityTypes[entityTypeName].Key;

            foreach (var name in keyNames)
            {
                if (!(dto.ContainsKey(name) || Regex.IsMatch(dto[name].ToString(), @"^\d+$")))
                {
                    return(false);
                }
            }
            return(true);
        }
            public static bool KeyPresent(string entityTypeName, Dto dto, MetadataSrv.Metadata metadataSrv)
            {
                var keyNames = metadataSrv.EntityTypes[entityTypeName].Key;

                foreach (var keyName in keyNames)
                {
                    if (!dto.ContainsKey(keyName))
                    {
                        return(false);
                    }
                }
                return(true);
            }
        public static bool ValidDto(string entityTypeName, Dto key, Dto dto, MetadataSrv.Metadata metadataSrv)
        {
            var keyNames = metadataSrv.EntityTypes[entityTypeName].Key;

            // if dto has key fields, their values should match the key values from query string
            foreach (var name in keyNames)
            {
                if (dto.ContainsKey(name) && dto[name] != key[name])
                {
                    return(false);
                }
            }
            return(true);
        }
        public static string GetEntityTypeName(string entitySetName, MetadataSrv.Metadata metadataSrv)
        {
            //var entityType = (from t in metadataSrv.entityTypes where t.Value.entitySetName == entitySetName select t).FirstOrDefault();
            //return entityType.Key;
            var result = string.Empty;

            foreach (var prop in metadataSrv.EntityTypes)
            {
                if (metadataSrv.EntityTypes[prop.Key].EntitySetName == entitySetName)
                {
                    result = prop.Key;
                }
            }
            return(result);
        }
        public static bool ValidKeys(string entityTypeName, IEnumerable <Dto> dtos, MetadataSrv.Metadata metadataSrv)
        {
            if (dtos == null || dtos.Count() == 0)
            {
                return(false);
            }
            var keyNames = metadataSrv.EntityTypes[entityTypeName].Key;

            foreach (var dto in dtos)
            {
                if (!ValidDtoKey(entityTypeName, dto, metadataSrv))
                {
                    return(false);
                }
            }
            return(true);
        }
 public LocalDtoViews(DataContext dataContext, MetadataSrv.Metadata metadataSrv) : base(dataContext, metadataSrv)
 {
     //this.["Actors"] = new DataViewLocalDto<Actor>(dataContext, metadataSrv);
     //this.["Addresses"] = new DataViewLocalDto<Address>(dataContext, metadataSrv);
     //this.["Categories"] = new DataViewLocalDto<Category>(dataContext, metadataSrv);
     //this.["Cities"] = new DataViewLocalDto<City>(dataContext, metadataSrv);
     //this.["Countries"] = new DataViewLocalDto<Country>(dataContext, metadataSrv);
     //this.["Customers"] = new DataViewLocalDto<Customer>(dataContext, metadataSrv);
     //this.["Films"] = new DataViewLocalDto<Film>(dataContext, metadataSrv);
     //this.["FilmActors"] = new DataViewLocalDto<FilmActor>(dataContext, metadataSrv);
     //this.["FilmCategories"] = new DataViewLocalDto<FilmCategory>(dataContext, metadataSrv);
     //this.["FilmTexts"] = new DataViewLocalDto<FilmText>(dataContext, metadataSrv);
     //this.["Inventories"] = new DataViewLocalDto<Inventory>(dataContext, metadataSrv);
     //this.["Languages"] = new DataViewLocalDto<Language>(dataContext, metadataSrv);
     //this.["Payments"] = new DataViewLocalDto<Payment>(dataContext, metadataSrv);
     //this.["Rentals"] = new DataViewLocalDto<Rental>(dataContext, metadataSrv);
     //this.["Staffs"] = new DataViewLocalDto<Staff>(dataContext, metadataSrv);
     //this.["Stores"] = new DataViewLocalDto<Store>(dataContext, metadataSrv);
 }
Пример #11
0
 public static Dialect Dialect(this MetadataSrv.Metadata metadataSrv)
 {
     // Minimum SQL 2012 because it has improved paging FETCH NEXT ... OFFSET ...
     if (metadataSrv.Dialect == "MSSQL11")
     {
         return(NavyBlueDtos.Dialect.SQL2012);
     }
     else if (metadataSrv.Dialect == "MSSQL12")
     {
         return(NavyBlueDtos.Dialect.SQL2014);
     }
     else if (metadataSrv.Dialect == "MYSQL")
     {
         return(NavyBlueDtos.Dialect.MYSQL);
     }
     else
     {
         throw new ArgumentException("Unsupported database");
     }
 }
            internal static string NavigationBranchToQueryText(string entityTypeName, string entityTypeQuery, List <MetadataSrv.NavigationProperty> navBranch, Dialect dialect, MetadataSrv.Metadata metadataSrv)
            {
                // A INNER JOIN B ON A.IdDepartament = B.IdDepartament AND A.IdPersoana = B.IdPersoana INNER JOIN C ON ...
                var entityTypeNameLocal = entityTypeName;
                var navLast             = navBranch[navBranch.Count - 1];
                var distinct            = navLast.Multiplicity == "single" ? "DISTINCT" : string.Empty;
                var fields    = metadataSrv.EntityTypes[navLast.EntityTypeName].Properties.ToDictionary((it) => it.Key, (it) => it.Value.FieldName);
                var result    = new StringBuilder(string.Format("SELECT {0} {1} FROM ", distinct, GetSelect(fields, false, dialect)));
                var tableName = metadataSrv.EntityTypes[entityTypeName].TableName;

                result.Append(!string.IsNullOrEmpty(entityTypeQuery) ? string.Format("({0}) AS {1}", entityTypeQuery, tableName) : tableName);
                for (var i = 0; i < navBranch.Count - 1; i++)
                {
                    var nav = navBranch[i];
                    result.Append(string.Format(" INNER JOIN {0} ON {1}", metadataSrv.EntityTypes[nav.EntityTypeName].TableName, GetJoinCondition(entityTypeNameLocal, false, nav, false, metadataSrv)));
                    entityTypeNameLocal = nav.EntityTypeName;
                }
                result.Append(string.Format(" INNER JOIN {0} AS it ON {1}", metadataSrv.EntityTypes[navLast.EntityTypeName].TableName, GetJoinCondition(entityTypeNameLocal, false, navLast, true, metadataSrv)));
                return(result.ToString());
            }
            internal static string GetJoinCondition(string entityTypeName, bool entityTypeTableAlias, MetadataSrv.NavigationProperty navigationProperty, bool navigationTableAlias, MetadataSrv.Metadata metadataSrv)
            {
                // t1.prop1 = t2.prop1 AND t1.prop2 = t2.prop2
                var result     = new List <string>();
                var entityType = metadataSrv.EntityTypes[entityTypeName];

                for (var i = 0; i < navigationProperty.KeyLocal.Length; i++)
                {
                    var entityTypeNav = metadataSrv.EntityTypes[navigationProperty.EntityTypeName];
                    result.Add((entityTypeTableAlias ? "it" : entityType.TableName) + "." + entityType.Properties[navigationProperty.KeyLocal[i]].FieldName + " = " + (navigationTableAlias ? "it" : entityTypeNav.TableName) + "." + entityTypeNav.Properties[navigationProperty.KeyRemote[i]].FieldName);
                }
                return(string.Join(" AND ", result));
            }
            internal static List <QueryResult> GetQueryResult(string entityTypeName, QueryObject queryObject, Dialect dialect, MetadataSrv.Metadata metadataSrv)
            {
                var result = new List <QueryResult>();

                var entityTypeQueries = BuildEntityTypeQueries(entityTypeName, queryObject, dialect, metadataSrv);

                var queryRoot = entityTypeQueries.QueryRoot;

                result.Add(new QueryResult()
                {
                    EntityTypeName = entityTypeName,
                    QueryText      = entityTypeQueries.QuerySelect
                });

                if (queryObject.Count != null)
                {
                    result.Add(new QueryResult()
                    {
                        EntityTypeName = null,
                        QueryText      = entityTypeQueries.QueryCount
                    });
                }

                if (queryObject.Expand != null && queryObject.Expand.Length > 0)
                {
                    var splitExpand = DataUtils.SplitExpand(queryObject.Expand, (el) => el);

                    foreach (var branch in DataUtils.NavigationBranch(splitExpand))
                    {
                        var navs = DataUtils.BranchToNavigation(entityTypeName, branch, metadataSrv);
                        var entityTypeNameLocal = navs[navs.Count - 1].EntityTypeName;
                        var foundEntityType     = result.FirstOrDefault((it) => it.EntityTypeName == entityTypeNameLocal);
                        if (foundEntityType == null)
                        {
                            result.Add(new QueryResult()
                            {
                                EntityTypeName = entityTypeNameLocal,
                                QueryText      = NavigationBranchToQueryText(entityTypeName, queryRoot, navs, dialect, metadataSrv)
                            });
                        }
                        else
                        {
                            foundEntityType.QueryText += " UNION " + NavigationBranchToQueryText(entityTypeName, queryRoot, navs, dialect, metadataSrv);
                        }
                    }
                }

                return(result);
            }
Пример #15
0
 public DataContext(MetadataSrv.Metadata metadataSrv)
 {
     this.metadataSrv = metadataSrv;
     this.entitySets  = new Dictionary <string, IEntitySet <IDerivedEntity> >();
 }
Пример #16
0
 public DataViewLocalDto(string entityTypeName, DataContext dataContext, MetadataSrv.Metadata metadataSrv)
 {
     this.entityTypeName = entityTypeName;
     this.dataContext    = dataContext;
     this.metadataSrv    = metadataSrv;
 }
Пример #17
0
 public static void FillResultRelatedItems(string entityTypeName, ResultSerialData resultSerialData, string[] expand, DataContext dataContext, MetadataSrv.Metadata metadataSrv)
 {
     if (expand != null && expand.Length > 0 && resultSerialData.Items != null && resultSerialData.Items.Count() > 0)
     {
         var splitExpand = DataUtils.SplitExpand(expand, (el) => el);
         foreach (var branch in DataUtils.NavigationBranch(splitExpand))
         {
             var navs               = DataUtils.BranchToNavigation(entityTypeName, branch, metadataSrv);
             var lastNav            = navs[navs.Count - 1];
             var rootEntityTypeName = string.Empty;
             IEnumerable <Dto> rootItems;
             if (branch.Length == 1)
             {
                 rootEntityTypeName = entityTypeName;
                 rootItems          = resultSerialData.Items;
             }
             else
             {
                 rootEntityTypeName = navs[navs.Count - 2].EntityTypeName;
                 rootItems          = resultSerialData.RelatedItems[rootEntityTypeName];
             }
             var navigationPropertyName = branch[branch.Length - 1];
             var entityTypeNameLocal    = lastNav.EntityTypeName;
             var relatedEntityItems     = dataContext.GetRelatedEntities(rootEntityTypeName, rootItems, navigationPropertyName).ToList();
             if (resultSerialData.RelatedItems == null)
             {
                 resultSerialData.RelatedItems = new Dictionary <string, IEnumerable <Dto> >();
             }
             if (!resultSerialData.RelatedItems.ContainsKey(entityTypeNameLocal))
             {
                 resultSerialData.RelatedItems[entityTypeNameLocal] = relatedEntityItems.Select(it => it.entity.dto);
             }
             else
             {
                 var items = resultSerialData.RelatedItems[entityTypeNameLocal].ToList();
                 PushMultiIfNotThere(relatedEntityItems, items);
                 resultSerialData.RelatedItems[entityTypeNameLocal] = items;
             }
         }
     }
 }
 public void Dispose()
 {
     this.DeleteAll();
     this.entitySets  = null;
     this.metadataSrv = null;
 }
 public ResultSerialUtils(DataViewDto dataViewDto, string apiRouteRoot, MetadataSrv.Metadata metadataSrv)
 {
     this.dataViewDto  = dataViewDto;
     this.apiRouteRoot = apiRouteRoot;
     this.metadataSrv  = metadataSrv;
 }
 public void Attach(Dictionary <string, IEntitySet <IDerivedEntity> > entitySets, MetadataSrv.Metadata metadataSrv)
 {
     this.entitySets  = entitySets;
     this.metadataSrv = metadataSrv;
 }
            private static string[] GetOrderBy(string entityTypeName, MetadataSrv.Metadata metadataSrv)
            {
                var keyNames = metadataSrv.EntityTypes[entityTypeName].Key;

                return(keyNames.Select((name) => string.Format("{0} DESC", name)).ToArray());
            }
        public static List <MetadataSrv.NavigationProperty> BranchToNavigation(string entityTypeName, string[] branch, MetadataSrv.Metadata metadataSrv)
        {
            var navigationPropertyList = new List <MetadataSrv.NavigationProperty>();
            var entityTypeNameLocal    = entityTypeName;

            foreach (var navigationPropertyName in branch)
            {
                var navigationProperties = metadataSrv.EntityTypes[entityTypeNameLocal].NavigationProperties;
                if (navigationProperties.ContainsKey(navigationPropertyName))
                {
                    navigationPropertyList.Add(navigationProperties[navigationPropertyName]);
                }
                else
                {
                    throw new Exception("invalid navigation property");
                }
                entityTypeNameLocal = navigationProperties[navigationPropertyName].EntityTypeName;
            }
            return(navigationPropertyList);
        }
Пример #23
0
 public ApiProviderDto(DataViewDto dataViewDto, ResultSerialUtils resultSerialUtils, MetadataSrv.Metadata metadataSrv)
 {
     this.dataViewDto       = dataViewDto;
     this.resultSerialUtils = resultSerialUtils;
     this.metadataSrv       = metadataSrv;
 }
Пример #24
0
 public static void FillResultSingleRelatedItems(string entityTypeName, ResultSingleSerialData resultSingleSerialData, string[] expand, DataContext dataContext, MetadataSrv.Metadata metadataSrv)
 {
     if (resultSingleSerialData.Item != null)
     {
         var resultSerialData = new ResultSerialData()
         {
             Items = new List <Dto>()
             {
                 resultSingleSerialData.Item
             },
             EntityTypeName = entityTypeName,
             TotalCount     = 0,
             RelatedItems   = { }
         };
         FillResultRelatedItems(entityTypeName, resultSerialData, expand, dataContext, metadataSrv);
         resultSingleSerialData.RelatedItems = resultSerialData.RelatedItems;
     }
 }
            internal static EntityTypeQueries BuildEntityTypeQueries(string entityTypeName, QueryObject queryObject, Dialect dialect, MetadataSrv.Metadata metadataSrv)
            {
                var select       = "it.*";
                var filter       = string.Empty;
                var filterExpand = new List <string>();
                var orderBy      = string.Empty;
                var skip         = string.Empty;
                var top          = string.Empty;

                var entityType = metadataSrv.EntityTypes[entityTypeName];

                var fields = entityType.Properties.ToDictionary((it) => it.Key, (it) => it.Value.FieldName);

                var selectFields    = fields;
                var hasCustomSelect = queryObject.Select != null && queryObject.Select.Length > 0;

                if (hasCustomSelect)
                {
                    var keyNames = entityType.Key;
                    selectFields = selectFields.Where((it) => keyNames.Contains(it.Key) || queryObject.Select.Contains(it.Key)).ToDictionary((it) => it.Key, (it) => it.Value);
                }
                select = GetSelect(selectFields, hasCustomSelect, dialect);

                var tableName       = !string.IsNullOrEmpty(queryObject.CustomQueryTable) ? string.Format("({0})", queryObject.CustomQueryTable) : metadataSrv.EntityTypes[entityTypeName].TableName;
                var entityTypeQuery = new StringBuilder(string.Format("SELECT {0} FROM {1} AS it", "{0}", tableName));

                if (queryObject.FilterExpand != null && queryObject.FilterExpand.Count > 0)
                {
                    var splitExpand = DataUtils.SplitExpand(queryObject.FilterExpand.ToArray(), (el) => el.Expand, (el, it, lastInPath) =>
                    {
                        // 'process' se executa doar la cea din urma proprietate de navigare
                        if (lastInPath)
                        {
                            it.Filter = el.Filter;
                        }
                    });

                    //DataUtils.ForEachNavigationFilter(entityTypeName, splitExpand, (parentEntityTypeName, nav, filterExp) =>
                    //{
                    //    var tableNameLocal = metadataSrv.EntityTypes[entityTypeName].TableName;
                    //    var join = GetJoinCondition(parentEntityTypeName, entityTypeName == parentEntityTypeName, nav, false, metadataSrv);
                    //    tableNameLocal = metadataSrv.EntityTypes[nav.EntityTypeName].TableName;

                    //    entityTypeQuery.Append(string.Format(" INNER JOIN {0} ON {1}", tableNameLocal, join));

                    //    if (!string.IsNullOrEmpty(filterExp))
                    //    {
                    //        var childElementFields = metadataSrv.EntityTypes[nav.EntityTypeName].Properties.ToDictionary((it) => it.Key, (it) => it.Value.FieldName);
                    //        filterExpand.Add(string.Format("( {0} )", ReplaceFieldNames(tableNameLocal, filterExp, childElementFields, dialect)));
                    //    }
                    //}, metadataSrv);

                    foreach (var navigationResult in DataUtils.NavigationFilter(entityTypeName, splitExpand, metadataSrv))
                    {
                        var parentEntityTypeName = navigationResult.EntityTypeName;
                        var nav       = navigationResult.NavigationProperty;
                        var filterExp = navigationResult.Filter;

                        var tableNameLocal = metadataSrv.EntityTypes[entityTypeName].TableName;
                        var join           = GetJoinCondition(parentEntityTypeName, entityTypeName == parentEntityTypeName, nav, false, metadataSrv);
                        tableNameLocal = metadataSrv.EntityTypes[nav.EntityTypeName].TableName;

                        entityTypeQuery.Append(string.Format(" INNER JOIN {0} ON {1}", tableNameLocal, join));

                        if (!string.IsNullOrEmpty(filterExp))
                        {
                            var childElementFields = metadataSrv.EntityTypes[nav.EntityTypeName].Properties.ToDictionary((it) => it.Key, (it) => it.Value.FieldName);
                            filterExpand.Add(string.Format("( {0} )", ReplaceFieldNames(tableNameLocal, filterExp, childElementFields, dialect)));
                        }
                    }
                }

                var arrFilter = new List <string>();

                if (queryObject.Filter != null)
                {
                    arrFilter.Add(string.Format("( {0} )", ReplaceFieldNames("it", queryObject.Filter, fields, dialect)));
                }
                if (filterExpand.Count > 0)
                {
                    arrFilter.AddRange(filterExpand);
                }
                if (arrFilter.Count > 0)
                {
                    filter = " WHERE " + string.Join(" AND ", arrFilter);
                }

                if (queryObject.OrderBy != null && queryObject.OrderBy.Length > 0)
                {
                    orderBy = " ORDER BY " + string.Join(", ", queryObject.OrderBy);
                    orderBy = ReplaceFieldNames("it", orderBy, fields, dialect);
                }

                switch (dialect)
                {
                case Dialect.SQL2012:
                case Dialect.SQL2014:
                    if (queryObject.Top != null)
                    {
                        top = string.Format(" FETCH NEXT {0} ROWS ONLY", queryObject.Top);
                    }

                    if (queryObject.Skip != null)
                    {
                        skip = string.Format(" OFFSET {0} ROWS", queryObject.Skip);
                    }
                    break;

                case Dialect.MYSQL:
                    if (queryObject.Top != null)
                    {
                        top = " LIMIT " + queryObject.Top;
                    }

                    if (queryObject.Skip != null)
                    {
                        skip = " OFFSET " + queryObject.Skip;
                    }
                    break;

                default:
                    break;
                }
                var queryCount = "COUNT(*) AS count";

                queryCount = string.Format(entityTypeQuery.ToString() + filter, queryCount);
                entityTypeQuery.Append(filter + orderBy + top + skip);

                var querySelect = string.Format(entityTypeQuery.ToString(), select);
                var queryRoot   = string.Format(entityTypeQuery.ToString(), "it.*");

                return(new EntityTypeQueries()
                {
                    QuerySelect = querySelect,
                    QueryCount = queryCount,
                    QueryRoot = queryRoot
                });
            }
        public static IEntitySet <IDerivedEntity> CreateEntitySet(string entityTypeName, Dictionary <string, IEntitySet <IDerivedEntity> > entitySets, MetadataSrv.Metadata metadataSrv)
        {
            var currentAssemblyName = Assembly.GetExecutingAssembly().CodeBase; //.Location
            var currentAssemblyUri  = new Uri(currentAssemblyName);
            var path = Path.GetDirectoryName(currentAssemblyUri.LocalPath);
            var targetAssemblyName = Path.Combine(path, string.Format("{0}.dll", metadataSrv.Namespace.Split(new char[] { '.' }).FirstOrDefault()));
            var targetAssembly     = Assembly.LoadFrom(targetAssemblyName);
            var derivedEntityType  = targetAssembly.GetType(metadataSrv.Namespace + "." + entityTypeName);
            //var derivedEntityType = Type.GetType(metadataSrv.Namespace + "." + entityTypeName);
            var d1          = typeof(EntitySet <>);
            var typeArgs    = new Type[] { derivedEntityType };
            var constructed = d1.MakeGenericType(typeArgs);
            var entitySet   = Activator.CreateInstance(constructed, new object[] { derivedEntityType, entitySets, metadataSrv });

            return((IEntitySet <IDerivedEntity>)entitySet);
        }
 public void Detach()
 {
     this.entitySets  = null;
     this.metadataSrv = null;
 }
 public LocalDtoViewsBase(DataContext dataContext, MetadataSrv.Metadata metadataSrv)
 {
     this.dataContext = dataContext;
     this.metadataSrv = metadataSrv;
 }
        //public static void ForEachNavigationFilter(string parentEntityTypeName, List<NavigationInclude> arr, Action<string, MetadataSrv.NavigationProperty, string> process, MetadataSrv.Metadata metadataSrv)
        //{
        //    foreach (var item in arr)
        //    {
        //        var childNavigationProperty = metadataSrv.EntityTypes[parentEntityTypeName].NavigationProperties[item.NavigationProperty];
        //        process(parentEntityTypeName, childNavigationProperty, item.Filter);
        //        if (item.Include.Count > 0)
        //        {
        //            ForEachNavigationFilter(childNavigationProperty.EntityTypeName, item.Include, process, metadataSrv);
        //        }
        //    }
        //}

        public static IEnumerable <NavigationResult> NavigationFilter(string parentEntityTypeName, List <NavigationInclude> arr, MetadataSrv.Metadata metadataSrv)
        {
            foreach (var item in arr)
            {
                var childNavigationProperty = metadataSrv.EntityTypes[parentEntityTypeName].NavigationProperties[item.NavigationProperty];
                yield return(new NavigationResult()
                {
                    EntityTypeName = parentEntityTypeName, NavigationProperty = childNavigationProperty, Filter = item.Filter
                });

                if (item.Include.Count > 0)
                {
                    foreach (var navigationResult in NavigationFilter(childNavigationProperty.EntityTypeName, item.Include, metadataSrv))
                    {
                        yield return(navigationResult);
                    }
                }
            }
        }
            public static QueryObject GetQueryObject(string entityTypeName, QueryObject queryObject, int skip, int top, MetadataSrv.Metadata metadataSrv)
            {
                var queryObjectLocal = JObject.FromObject(queryObject).ToObject <QueryObject>();

                if (queryObjectLocal.OrderBy == null || queryObjectLocal.OrderBy.Length == 0)
                {
                    queryObjectLocal.OrderBy = GetOrderBy(entityTypeName, metadataSrv);
                }
                queryObjectLocal.Count = false;
                queryObjectLocal.Skip  = skip;
                queryObjectLocal.Top   = top;
                return(queryObjectLocal);
            }