Linq (Language-Integrated Query) представляет простой и удобный язык запросов к источнику данных. В качестве источника данных может выступать объект, реализующий интерфейс ienumerable



Download 38,24 Kb.
bet7/7
Sana06.04.2022
Hajmi38,24 Kb.
#531772
TuriЛекции
1   2   3   4   5   6   7
Bog'liq
C# LINQ

SelectMany и сведение объектов


Метод SelectMany позволяет свести набор коллекций в одну коллекцию. Он имеет ряд перегруженных версий. Возьмем одну из них:

SelectMany(Func> selector);
SelectMany(Func> collectionSelector, Func resultSelector);

Первая версия метода принимает функцию преобразования в виде делегата Func>. Функция преобразования получает каждый объект выборки типа TSource и с его помощью создает набор объектов TResult. Метод SelectMany возвращает коллекцию преобразованных объектов.
Вторая версия принимает функцию преобразования в виде делегата Func>. Функция преобразования получает каждый объект выборки типа TSource и возвращает некоторую промежуточную коллекцию типа TCollection. Второй параметр - то же функция функция преобразования в виде делегата Func, которая получает два параметра - каждый элемент текущей выборки и каждый элемент промежуточной коллекции и на их основе создает некоторый объект типа TResult.
Рассмотрим следующий пример:



var companies = new List
{
new Company("Microsoft", new List
{new Person("Tom"), new Person("Bob")}),
new Company("Google", new List
{new Person("Sam"), new Person("Mike")}),
};
var employees = companies.SelectMany(c => c.Staff);
foreach (var emp in employees)
Console.WriteLine($"{emp.Name}");
record class Company(string Name, List
Staff);
record class Person(string Name);

Здесь нам дан список компаний, в каждой компании имеет набор сотрудников в виде списка объектов Person. И на выходе мы получаем список сотрудников всех компаний, то есть по сути коллекцию объектов Person. Консольный вывод:
Tom
Bob
Sam
Mike
Аналогичный пример с помощью операторов LINQ:

var companies = new List
{
new Company("Microsoft", new List
{new Person("Tom"), new Person("Bob")}),
new Company("Google", new List
{new Person("Sam"), new Person("Mike")}),
};
var employees = from c in companies
from emp in c.Staff
select emp;
foreach (var emp in employees)
Console.WriteLine($"{emp.Name}");
record class Company(string Name, List
Staff);
record class Person(string Name);

Теперь добавим к сотрудникам их компанию:

var companies = new List
{
new Company("Microsoft", new List
{new Person("Tom"), new Person("Bob")}),
new Company("Google", new List
{new Person("Sam"), new Person("Mike")}),
};
var employees = companies.SelectMany(c => c.Staff,
(c, emp)=> new { Name = emp.Name, Company = c.Name});
foreach (var emp in employees)
Console.WriteLine($"{emp.Name} - {emp.Company}");
record class Company(string Name, List
Staff);
record class Person(string Name);

Здесь применяется другая версия метода SelectMany. Первый делегат в виде c => c.Staff создает промежуточную коллекцию - фактически просто возвращаем набор сотрудников каждой компании. Второй делегат - (c, emp)=> new { Name = emp.Name, Company = c.Name } получает каждую компанию и каждый элемент промежуточной коллекции - объект Person и на их основе создает анонимный объект с двумя свойствами Name и Company. Консольный вывод программы:
Tom - Microsoft
Bob - Microsoft
Sam - Google
Mike - Google
Аналогичный пример с помощью операторов запросов:

var companies = new List
{
new Company("Microsoft", new List
{new Person("Tom"), new Person("Bob")}),
new Company("Google", new List
{new Person("Sam"), new Person("Mike")}),
};
var employees = from c in companies
from emp in c.Staff
select new { Name = emp.Name, Company = c.Name };
foreach (var emp in employees)
Console.WriteLine($"{emp.Name} - {emp.Company}");
record class Company(string Name, List
Staff);
record class Person(string Name);


Download 38,24 Kb.

Do'stlaringiz bilan baham:
1   2   3   4   5   6   7




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©hozir.org 2024
ma'muriyatiga murojaat qiling

kiriting | ro'yxatdan o'tish
    Bosh sahifa
юртда тантана
Боғда битган
Бугун юртда
Эшитганлар жилманглар
Эшитмадим деманглар
битган бодомлар
Yangiariq tumani
qitish marakazi
Raqamli texnologiyalar
ilishida muhokamadan
tasdiqqa tavsiya
tavsiya etilgan
iqtisodiyot kafedrasi
steiermarkischen landesregierung
asarlaringizni yuboring
o'zingizning asarlaringizni
Iltimos faqat
faqat o'zingizning
steierm rkischen
landesregierung fachabteilung
rkischen landesregierung
hamshira loyihasi
loyihasi mavsum
faolyatining oqibatlari
asosiy adabiyotlar
fakulteti ahborot
ahborot havfsizligi
havfsizligi kafedrasi
fanidan bo’yicha
fakulteti iqtisodiyot
boshqaruv fakulteti
chiqarishda boshqaruv
ishlab chiqarishda
iqtisodiyot fakultet
multiservis tarmoqlari
fanidan asosiy
Uzbek fanidan
mavzulari potok
asosidagi multiservis
'aliyyil a'ziym
billahil 'aliyyil
illaa billahil
quvvata illaa
falah' deganida
Kompyuter savodxonligi
bo’yicha mustaqil
'alal falah'
Hayya 'alal
'alas soloh
Hayya 'alas
mavsum boyicha


yuklab olish