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()); }
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 ответов }