Упражнение 3. Расширение возможностей запроса
Присвоение переменной неявного типа
Явное кодирование IEnumerables из IGroupings может быстро стать трудоемким.
С помощью var можно более просто написать тот же запрос и цикл foreach. Ключевое слово var не приводит к изменению типов объектов; оно просто сообщает компилятору о необходимости определения типов.
1. Создайте новый запрос и обратите внимание на применение ключевого слова var:
var studentQuery3 =
from student in students
group student by student.Last[0];
foreach (var groupOfStudents in studentQuery3)
{
Console.WriteLine(groupOfStudents.Key);
foreach (var student in groupOfStudents)
{
Console.WriteLine(" {0}, {1}",
student.Last, student.First);
}
}
Упорядочение групп по значению их ключа
При выполнении предыдущего запроса группы были расположены не в алфавитном порядке.
2. Создайте новый запрос на основе предыдущего.
3. Укажите предложение orderby после предложения group.
4. Чтобы использовать предложение orderby, нужен идентификатор, служащий в качестве ссылки на группы, создаваемые предложением group. Предоставьте идентификатор с помощью ключевого слова into следующим образом:
var studentQuery4 =
from student in students
group student by student.Last[0] into studentGroup
orderby studentGroup.Key
select studentGroup;
foreach (var groupOfStudents in studentQuery4)
{
Console.WriteLine(groupOfStudents.Key);
foreach (var student in groupOfStudents)
{
Console.WriteLine(" {0}, {1}",
student.Last, student.First);
}
}
|
|
5. Постройте и запустите приложение. При выполнении этого запроса группы будут отсортированы в алфавитном порядке.
Введение идентификаторов с помощью let
Ключевое слово let можно использовать для представления идентификатора для любого результата выражения в выражении запроса.
6. Создайте новый запрос:
var studentQuery5 =
from student in students
let totalScore = student.Scores[0] + student.Scores[1] +
student.Scores[2] + student.Scores[3]
where totalScore / 4 < student.Scores[0]
select student.Last + " " + student.First;
foreach (string s in studentQuery5)
{
Console.WriteLine(s);
}
7. Исследуйте работу запроса. Обратите внимание, что идентификатор let применяется больше для удобства, хотя в других случаях он может повысить производительность, сохраняя результаты выражения так, чтобы оно не вычислялось повторно.
Использование синтаксиса метода в выражении запроса
Некоторые операции запроса могут быть выражены только с помощью синтаксиса методов.
8. Создайте новый запрос в котором вычисляется общий результат для каждого Student в исходной последовательности, а затем вызовите метод Average(), использующий результаты запроса для вычисления среднего балла класса. Обратите внимание на круглые скобки вокруг выражения запроса.
var studentQuery6 =
from student in students
let totalScore = student.Scores[0] + student.Scores[1] +
|
|
student.Scores[2] + student.Scores[3]
select totalScore;
double averageScore = studentQuery6.Average();
Console.WriteLine("Class average score = {0}", averageScore);
9. Постройте и запустите приложение.
Преобразование или проецирование в предложении select
Очень часто в запросах создаются последовательности, элементы которых отличаются от элементов в исходных последовательностях.
10. Создайте новый запрос, который возвращает последовательность строк (не Students):
IEnumerable<string> studentQuery7 =
from student in students
where student.Last == "Garcia"
select student.First;
11. В цикле foreach реализуйте перебор строк:
Console.WriteLine("The Garcias in the class are:");
foreach (string s in studentQuery7)
{
Console.WriteLine(s);
}
12. Постройте и запустите приложение.
13. Создайте новый запрос на основе предыдущего.
14. Создайте последовательность Students, суммарный результат баллов которых больше среднего, вместе с их StudentID, используйте анонимный тип в инструкции select:
var studentQuery8 =
from student in students
let x = student.Scores[0] + student.Scores[1] +
student.Scores[2] + student.Scores[3]
where x > averageScore
select new { id = student.ID, score = x };
foreach (var item in studentQuery8)
{
Console.WriteLine("Student ID: {0}, Score: {1}", item.id, item.score);
}
15. Постройте и запустите приложение.
Дата добавления: 2019-02-26; просмотров: 146; Мы поможем в написании вашей работы! |
Мы поможем в написании ваших работ!