示例#1
0
        public static void TestLinqToObjects()
        {
            Test<string> test = GetTest();

            /* В коллекции 6 вопросов: 3 с уровнем сложности Easy, 1 - Normal, 2 - Hard */

            /* Выполняем фильтрацию коллекции вопросов по уровню сложности Hard (должно быть 2 вопроса) */
            IEnumerable<IQuestion<string>> hardQuestions =
                test.Where(question => ((Question<string>) question).ComplexityLevel == ComplexityLevel.Hard);
            Debug.Assert(
                hardQuestions.All(question => ((Question<string>) question).ComplexityLevel == ComplexityLevel.Hard));

            /* Выполняем проекцию коллекции вопросов: получаем тексты вопросов */
            IEnumerable<string> texts = test.Select(question => question.Contents);
            Debug.Assert(texts.Count() == 6);

            /* Выполняем группировку элементов коллекции вопросов по уровню сложности */
            IGrouping<ComplexityLevel, IQuestion<string>>[] groups =
                test.GroupBy(question => ((Question<string>) question).ComplexityLevel).ToArray();
            Debug.Assert(groups.Count() == 3); // должны получить 3 группы вопросов: Easy, Normal, Hard
            IGrouping<ComplexityLevel, IQuestion<string>> normalQuestions =
                groups.First(grouping => grouping.Key == ComplexityLevel.Normal); // находим группу Normal вопросов
            IQuestion<string> normalQuestion =
                test.First(question => ((Question<string>) question).ComplexityLevel == ComplexityLevel.Normal);
            // есть только 1 вопрос Normal
            Debug.Assert(Equals(normalQuestions.First(), normalQuestion));

            /* Выполняем преобразования коллекции */
            IQuestion<string>[] questions = test.ToArray();
            Debug.Assert(questions.SequenceEqual(test.Questions)); // последовательности должны быть одинаковыми

            /* Выполняем вычисления агрегатных функций */
            Debug.Assert(test.Count() == test.QuestionsCount);
            IQuestion<string> newBigQuestion = test.Aggregate((question1, question2) =>
                                                                  {
                                                                      var newQuestion =
                                                                          new Question<string>(question1.Contents + " " +
                                                                                               question2.Contents);
                                                                      newQuestion.AddAnswersRange(question1.Answers);
                                                                      newQuestion.AddAnswersRange(question2.Answers);
                                                                      return newQuestion;
                                                                  });
            Debug.Assert(newBigQuestion.Answers.Any());
        }
示例#2
0
        static void TestLINQtoObjects()
        {
            var test = GetTest();

            /* В коллекции 6 вопросов: 3 с уровнем сложности Easy, 1 - Normal, 2 - Hard */

            /* Выполняем фильтрацию коллекции вопросов по уровню сложности Hard (должно быть 2 вопроса) */
            var hardQuestions = test.Where(question =>
                {
                    var question3 = question as Question;
                    return question3 != null && question3.ComplexityLevel == ComplexityLevel.Hard;
                });
            Debug.Assert(hardQuestions.All(question => ((Question)question).ComplexityLevel == ComplexityLevel.Hard));
            /* Выполняем проекцию коллекции вопросов: получаем тексты вопросов */
            var texts = test.Select(question => question.Contents);
            Debug.Assert(texts.Count() == 6);

            /* Выполняем группировку элементов коллекции вопросов по уровню сложности */
            var groups = test.GroupBy(question => ((Question)question).ComplexityLevel).ToArray();
            Debug.Assert(groups.Count() == 3); // должны получить 3 группы вопросов: Easy, Normal, Hard
            var normalQuestions = groups.First(grouping => grouping.Key == ComplexityLevel.Normal); // находим группу Normal вопросов
            var normalQuestion = test.First(question => ((Question)question).ComplexityLevel == ComplexityLevel.Normal); // есть только 1 вопрос Normal
            Debug.Assert(Equals(normalQuestions.First(), normalQuestion));

            /* Выполняем преобразования коллекции */
            var questions = test.ToArray();
            Debug.Assert(questions.SequenceEqual(test.Questions)); // последовательности должны быть одинаковыми

            /* Выполняем вычисления агрегатных функций */
            Debug.Assert(test.Count() == test.QuestionsCount);
            var newBigQuestion = test.Aggregate((question1, question2) =>
                {
                    var newQuestion = new Question(question1.Contents + " " + question2.Contents);
                    newQuestion.AddAnswersRange(question1.Answers);
                    newQuestion.AddAnswersRange(question2.Answers);
                    return newQuestion;
                });
            Console.WriteLine(newBigQuestion.Contents); // длинный текст вопроса
            Console.WriteLine(newBigQuestion.Answers.Count()); // 17 ответов
        }