public static DimensionTree CreateDimensionTree(string datasetName)
        {
            var tree        = new DimensionTree(datasetName);
            var placeValues = new List <DimensionValueDto>
            {
                new DimensionValueDto {
                    Id = 1, Value = "Czech republic"
                },
                new DimensionValueDto {
                    Id = 2, Value = "Slovakia"
                },
                new DimensionValueDto {
                    Id = 3, Value = "Russia"
                },
            };
            var regionValues = new List <DimensionValueDto>
            {
                new DimensionValueDto {
                    Id = 1, Value = "Europe"
                },
                new DimensionValueDto {
                    Id = 2, Value = "Asia"
                }
            };
            var productValues = new List <DimensionValueDto>
            {
                new DimensionValueDto {
                    Id = 1, Value = "Bread"
                },
                new DimensionValueDto {
                    Id = 2, Value = "Bun"
                },
                new DimensionValueDto {
                    Id = 3, Value = "Milk"
                },
            };
            var categoryValues = new List <DimensionValueDto>
            {
                new DimensionValueDto {
                    Id = 1, Value = "Bakery"
                },
                new DimensionValueDto {
                    Id = 2, Value = "Dairy"
                }
            };

            tree.Add(CreateDimensionDto(datasetName, 1, "Place", null, typeof(string), placeValues));
            tree.Add(CreateDimensionDto(datasetName, 2, "Region", 1, typeof(string), regionValues));
            tree.Add(CreateDimensionDto(datasetName, 3, "Product", null, typeof(string), productValues));
            tree.Add(CreateDimensionDto(datasetName, 4, "Category", 3, typeof(string), categoryValues));
            return(tree);
        }
        public DimensionTree ConvertToTree(IEnumerable <Dimension> dimensions, string prefix, bool populate = false)
        {
            var dimensionList = dimensions.ToList();
            var dimensionTree = new DimensionTree(dimensionList.First().DataSet.Name, prefix);

            while (dimensionTree.Count != dimensionList.Count)
            {
                foreach (var dimension in dimensionList)
                {
                    var dimToAdd = new TreeDimensionDto
                    {
                        Children    = new List <TreeDimensionDto>(),
                        Id          = dimension.Id,
                        Name        = dimension.Name,
                        ParentId    = dimension.ParentDimension?.Id,
                        DatasetName = dimension.DataSet.Name,
                        Type        = dimension.Type.ToType(),
                        Prefix      = prefix
                    };
                    if (!dimensionTree.Contains(dimToAdd))
                    {
                        if (dimension.ParentDimension == null)
                        {
                            dimensionTree.Add(dimToAdd);
                        }
                        else
                        {
                            if (dimensionTree.Contains((int)dimension.ParentDimension.Id))
                            {
                                dimensionTree.Add(dimToAdd);
                            }
                        }
                    }
                }
            }
            if (populate)
            {
                Populate(dimensionTree);
            }
            return(dimensionTree);
        }