public void Execute(IDataBase db)
        {
            var olapRound = new OlapRound("Тестовая подготовка", "2015");

            db.InsertOlapRound(olapRound);
        }
        public static OlapCube ExportOlapCube(this OlapCube olapCube)
        {
            var result = new List<OlapCube>();

            object conditionDefinition = null;

            var @switch = new Dictionary<string, Action>
            {
                {
                    Conditions[0], () =>
                    {
                        result.Add(new OlapCube(olapCube.OlapRounds.Where(item => item.Year == (string)conditionDefinition).ToArray()));
                    }
                },
                {
                    Conditions[1], () =>
                    {
                        result.Add(new OlapCube(olapCube.OlapRounds.Where(item => item.Name == (conditionDefinition as OlapRound).Name).ToArray()));
                    }
                },
                {
                    Conditions[2], () =>
                    {
                        var _group = conditionDefinition as Group;

                        // TODO: Такая портянка :D

                        result.Add(new OlapCube(
                            (
                                from olapRound in olapCube.OlapRounds //Выбираем циклы

                                let list = olapRound.CertifiedTests.Where //Формируем список оцененных тестов
                                (
                                    certifiedTest =>
                                    _group.Peoples.FirstOrDefault(people => people.Equals(certifiedTest.PassedTest.People)) != null //В которых есть люди, принадлежащие данной группе
                                ).ToArray()

                                where list.Length != 0 //Отсекаем пустые циклы

                                select new

                                OlapRound(olapRound.Name, olapRound.Year, list, olapRound.Id) //Создаем новый цикл

                            ).ToArray()
                        ));
                    }
                },
                {
                    Conditions[3], () =>
                    {
                        var people = conditionDefinition as People;

                        // TODO: Еще одна :D

                        result.Add(new OlapCube(
                            (
                                from olapRound in olapCube.OlapRounds

                                let listTests = olapRound.CertifiedTests.Where
                                (
                                    certifiedTest => certifiedTest.PassedTest.People.Equals(people)
                                ).ToArray()

                                where listTests.Length != 0

                                select new

                                OlapRound(olapRound.Name, olapRound.Year, listTests, olapRound.Id)

                            ).ToArray()
                        ));
                    }
                },
                {
                    Conditions[4], () =>
                    {
                        var date = (DateTime)conditionDefinition;

                        // TODO: Я все никак не успокоюсь

                        result.Add(new OlapCube(
                            (
                                from olapRound in olapCube.OlapRounds

                                let listTests = olapRound.CertifiedTests.Where
                                (
                                    certifiedTest => certifiedTest.PassedTest.PassDate.Date.ToShortDateString() == date.Date.ToShortDateString()
                                ).ToArray()

                                where listTests.Length != 0

                                select new

                                OlapRound(olapRound.Name, olapRound.Year, listTests, olapRound.Id)

                            ).ToArray()
                        ));
                    }
                },
                {
                    Conditions[5], () =>
                    {
                        var test = conditionDefinition as Test;

                        // TODO: Ну теперь пожалуй хватит

                        result.Add(new OlapCube(
                            (
                                from olapRound in olapCube.OlapRounds

                                let listTests = olapRound.CertifiedTests.Where
                                (
                                    certifiedTest => certifiedTest.PassedTest.Test.Equals(test)
                                ).ToArray()

                                where listTests.Length != 0

                                select new

                                OlapRound(olapRound.Name, olapRound.Year, listTests, olapRound.Id)

                            ).ToArray()
                        ));
                    }
                }
            };

            foreach (var definition in Definitions)
            {
                foreach (var obj in definition.Value)
                {
                    conditionDefinition = obj;

                    Action action;

                    @switch.TryGetValue(definition.Key, out action);

                    action();
                }
            }

            var listRounds = new List<OlapRound>();

            foreach (var cube in result)
            {
                foreach (var round in cube.OlapRounds)
                {
                    var contains = false;
                    var indexContains = -1;

                    for (var i = 0; i < listRounds.Count && !contains; i++)
                    {
                        contains = round.Equals(listRounds[i]);
                        indexContains = i;
                    }

                    if (!contains)
                    {
                        listRounds.Add(round);
                    }
                    else
                    {
                        foreach (var test in round.CertifiedTests)
                        {
                            var currentRound = listRounds[indexContains];

                            contains = false;

                            for (var i = 0; i < currentRound.CertifiedTests.Length && !contains; i++)
                            {
                                contains = currentRound.CertifiedTests[i].Equals(test);
                            }

                            if (!contains)
                            {
                                var newListCertifiedTests = new List<CertifiedTest>();

                                newListCertifiedTests.AddRange(currentRound.CertifiedTests);
                                newListCertifiedTests.Add(test);

                                listRounds[indexContains] = new OlapRound(currentRound.Name, currentRound.Year, newListCertifiedTests.ToArray(), currentRound.Id);
                            }
                        }
                    }
                }
            }

            return Definitions.IsEmpty() ? olapCube : new OlapCube(listRounds.ToArray());
        }
 public RoundReport(OlapRound olapRound)
 {
     OlapRound = olapRound;
 }