LINQ. WinForms vs WPF. Лекция 10

Содержание

Слайд 2

LINQ

Аббревиатура LINQ (Language-Integrated Query) обозначает целый набор технологий, создающих и использующих возможности

LINQ Аббревиатура LINQ (Language-Integrated Query) обозначает целый набор технологий, создающих и использующих
интеграции запросов непосредственно в язык C# вместо изучения различных языков запросов для каждого типа источников данных: баз данных (реляционных и нереляционных), XML-документов, различных веб-служб и т. д.
LINQ to Objects: применяется для работы с массивами и коллекциями
LINQ to Entities: используется при обращении к базам данных через технологию Entity Framework
LINQ to Sql: технология доступа к данным в MS SQL Server
LINQ to XML: применяется при работе с файлами XML
LINQ to DataSet: применяется при работе с объектом DataSet
Parallel LINQ (PLINQ): используется для выполнения параллельных запросов

Слайд 3

string[] teams = {"Бавария", "Боруссия", "Реал Мадрид", "Манчестер Сити", "ПСЖ", "Барселона"};
var selectedTeams

string[] teams = {"Бавария", "Боруссия", "Реал Мадрид", "Манчестер Сити", "ПСЖ", "Барселона"}; var
= new List();
foreach(string s in teams){
if (s.ToUpper().StartsWith("Б"))
selectedTeams.Add(s);
}
selectedTeams.Sort();
//////////////////////////////////////////////
var selectedTeams = from t in teams
where t.ToUpper().StartsWith("Б")
orderby t select t;

Слайд 4

Выражение запроса должно начинаться предложением from и заканчиваться предложением select или group.

Выражение запроса должно начинаться предложением from и заканчиваться предложением select или group.
Между первым предложением from и последним предложением select или group может содержаться одно или несколько необязательных предложений: where, orderby, join, let (определение локальной переменной) и даже дополнительных предложений from. Можно также использовать ключевое слово into, чтобы результат предложения join или group мог служить источником дополнительных предложений запроса в том же выражении запроса.
IEnumerable queryFirstNames =
from name in names
let firstName = name.Split(' ')[0]
select firstName;

Слайд 5

Вложенный запросы

var queryGroupMax =
from student in students
group student by student.GradeLevel

Вложенный запросы var queryGroupMax = from student in students group student by
into studentGroup
select new
{
Level = studentGroup.Key,
HighestScore =
(from student2 in studentGroup
select student2.Scores.Average())
.Max()
};

Слайд 6

Join

Соединение по простому ключу
var query = from person in people
join pet in

Join Соединение по простому ключу var query = from person in people
pets on person equals pet.Owner
select new { OwnerName = person.FirstName, PetName = pet.Name };
Соединение по составному ключу
IEnumerable query = from employee in employees
join student in students
on new { employee.FirstName, employee.LastName }
equals new { student.FirstName, student.LastName }
select employee.FirstName + " " + employee.LastName;

Слайд 7

Обработка null-значений

var query =
from c in categories
where c != null

Обработка null-значений var query = from c in categories where c !=
join p in products on c.ID equals
p?.CategoryID
select new { Category = c.Name, Name = p.Name };
var query =
from o in db.Orders
join e in db.Employees
on o.EmployeeID equals (int?)e.EmployeeID
select new { o.OrderID, e.FirstName };

Слайд 8

Left join

var query = from person in people
join pet in pets on

Left join var query = from person in people join pet in
person equals pet.Owner into gj
from subpet in gj.DefaultIfEmpty()
select new { person.FirstName, PetName = subpet?.Name ?? String.Empty };

Слайд 9

Возвращение запроса из метода

IEnumerable QueryMethod(ref int[] ints){
var intsToStrings = from i in

Возвращение запроса из метода IEnumerable QueryMethod(ref int[] ints){ var intsToStrings = from
ints
where i > 4
select i.ToString();
return intsToStrings;
}

int[] nums = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
foreach (string s in app.QueryMethod(ref nums)){
Console.WriteLine(s);
}

Слайд 10

LINQ to XML




Apple
40000


Samsung
33000


XDocument xdoc =

LINQ to XML Apple 40000 Samsung 33000 XDocument xdoc = XDocument.Load("phones.xml"); var
XDocument.Load("phones.xml");
var items = from xe in xdoc.Element("phones").Elements("phone")
where xe.Element("company").Value=="Samsung"
select new Phone {
Name = xe.Attribute("name").Value,
Price = xe.Element("price").Value
};

Слайд 11

PLINQ

PLINQ или параллельный LINQ — это механизм параллельного выполнения выражений LINQ. Другими

PLINQ PLINQ или параллельный LINQ — это механизм параллельного выполнения выражений LINQ.
словами, обычное выражение LINQ можно легко распараллелить между любым количеством потоков. Это выполняется путем вызова метода AsParallel. Он реализован как метод расширения LINQ у массивов и коллекций. При вызове данного метода источник данных разделяется на части (если это возможно) и над каждой частью отдельно производятся операции
var factorials = from n in numbers.AsParallel()
select Factorial(n);

Слайд 12

AsOrdered

Метод упорядочивает результат в соответствии с тем, как элементы располагаются в исходной

AsOrdered Метод упорядочивает результат в соответствии с тем, как элементы располагаются в
последовательности
var factorials = from n in numbers.AsParallel().AsOrdered()
where n >0
select Factorial(n);
Если в программе предстоят какие-нибудь манипуляции с полученным набором, однако упорядочивание больше не требуется, мы можем применить метод AsUnordered()
var factorials = from n in numbers.AsParallel().AsOrdered()
where n >0
select Factorial(n);
var query = from n in factorials.AsUnordered()
where n > 100
select n;

Слайд 13

Методы расширения LINQ

Select: определяет проекцию выбранных значений
Where: определяет фильтр выборки

Методы расширения LINQ Select: определяет проекцию выбранных значений Where: определяет фильтр выборки
OrderBy: упорядочивает элементы по возрастанию
OrderByDescending: упорядочивает элементы по убыванию
ThenBy: задает дополнительные критерии для упорядочивания элементов возрастанию
ThenByDescending: задает дополнительные критерии для упорядочивания элементов по убывани
Join: соединяет две коллекции по определенному признаку
GroupBy: группирует элементы по ключу
ToLookup: группирует элементы по ключу, при этом все элементы добавляются в словарь
GroupJoin: выполняет одновременно соединение коллекций и группировку элементов по ключу
Reverse: располагает элементы в обратном порядке
All: определяет, все ли элементы коллекции удовлетворяют определенному условию
Any: определяет, удовлетворяет хотя бы один элемент коллекции определенному условию
Contains: определяет, содержит ли коллекция определенный элемент
Distinct: удаляет дублирующиеся элементы из коллекции
Except: возвращает разность двух коллекцию, то есть те элементы, которые создаются только в одной коллекции
Union: объединяет две однородные коллекции
Intersect: возвращает пересечение двух коллекций, то есть те элементы, которые встречаются в обоих коллекциях

Слайд 14

Count: подсчитывает количество элементов коллекции, которые удовлетворяют определенному условию
Sum: подсчитывает

Count: подсчитывает количество элементов коллекции, которые удовлетворяют определенному условию Sum: подсчитывает сумму
сумму числовых значений в коллекции
Average: подсчитывает cреднее значение числовых значений в коллекции
Agregate: подсчет итогового значения для всех элементов
Min: находит минимальное значение
Max: находит максимальное значение
Take: выбирает определенное количество элементов
Skip: пропускает определенное количество элементов
TakeWhile: возвращает цепочку элементов последовательности, до тех пор, пока условие истинно
SkipWhile: пропускает элементы в последовательности, пока они удовлетворяют заданному условию, и затем возвращает оставшиеся элементы
Concat: объединяет две коллекции
Zip: объединяет две коллекции в соответствии с определенным условием
First: выбирает первый элемент коллекции
FirstOrDefault: выбирает первый элемент коллекции или возвращает значение по умолчанию
Single: выбирает единственный элемент коллекции, если коллекция содержит больше или меньше одного элемента, то генерируется исключение
SingleOrDefault: выбирает первый элемент коллекции или возвращает значение по умолчанию
ElementAt: выбирает элемент последовательности по определенному индексу
ElementAtOrDefault: выбирает элемент коллекции по определенному индексу или возвращает значение по умолчанию, если индекс вне допустимого диапазона
Last: выбирает последний элемент коллекции
LastOrDefault: выбирает последний элемент коллекции или возвращает значение по умолчанию

Слайд 15

Zip

Метод Zip позволяет объединять две последовательности таким образом, что первый элемент из

Zip Метод Zip позволяет объединять две последовательности таким образом, что первый элемент
первой последовательности объединяется с первым элементом из второй последовательности, второй элемент из первой последовательности соединяется со вторым элементом из второй последовательности и так далее
var result2 = players.Zip(teams,
(player, team) => new{
Name = player.Name,
Team = team.Name, Country = team.Country
});

Слайд 21

WPF (Windows Presentation Foundation)

Независимость от разрешения экрана: поскольку в WPF все элементы

WPF (Windows Presentation Foundation) Независимость от разрешения экрана: поскольку в WPF все
измеряются в независимых от устройства единицах, приложения на WPF легко масштабируются под разные экраны с разным разрешением.
Новые возможности, которых сложно было достичь в WinForms, например, создание трехмерных моделей, привязка данных, использование таких элементов, как стили, шаблоны, темы и др.
Богатые возможности по созданию различных приложений: это и мультимедиа, и двухмерная и трехмерная графика, и богатый набор встроенных элементов управления, а также возможность самим создавать новые элементы, создание анимаций, привязка данных, стили, шаблоны, темы и многое другое
Декларативное создание интерфейса
Аппаратное ускорение графики - вне зависимости от того, работаете ли вы с 2D или 3D, графикой или текстом, все компоненты приложения транслируются в объекты, понятные Direct3D, и затем визуализируются с помощью процессора на видеокарте, что повышает производительность, делает графику более плавной.