Розбивка результатів на групи LINQ в Visual C # (Sharp)

У попередніх прикладах запити LINQ повертали список клієнтів, яким потрібно присвоїти додаткові бонусні очки Але що, якщо ми не хочемо прваівать окуляри відразу ж Що, якщо ми хочемо розбити клієнтів на групи: тих, які повинні отримати очки і тих, які не повинні отримати очки Даая завдання вирішується за допомогою можливості групування LINQ, як показано в наступному коді:

var groupedcustomers =

from customer in customers

group customer by customerPoints &gt 5 into rewarded

select new { ShouldReward = rewardedKey, Customers = rewarded }

Використання ключового слова group змінює характер оператора select Кльове слово group можна розглядати, як специфічну форму оператора select Перш ніж обробка дійде до select, ключове слово group створює новий список елементів, які передаються у вигляді окремих списків оперору select

У даному прикладі це означає, що оператор from вибере всіх клієнтів, кожен з яких передається коду, що виконує операцію, яка повертає знач Повернене значення у вигляді булевого true або false вказує, заохочувати чи клієнта додатковими очками чи ні Якщо значення true, то клієнту потрібно дати додаткові очки Незалежно від стану, клієнт додається до групи, яка буде тимчасово називатися rewarded (заохочені)

Якщо перетворити ключові слова from і group в код на С #, то вийшов код буде схожий на наступний код (хоча і не зовсім такий, але досить бліій, щоб дати гарне уявлення про те, що відбувається):

Dictionary&ltbool,  List&ltCustomer&gt&gt grouped = new Dictionary&ltbool, List&ltCustomer&gt&gt()

groupedAdd(true, new List&ltCustomer&gt()) groupedAdd(false, new List&ltCustomer&gt()) foreach (var customer in customers) {

if (customersPoints &gt5 ) { grouped[true]Add(customer)

&gt&nbsp

else {

grouped[false]Add(customer)

}

}

Ключове слово group створює список пар ключ / значення, в якому кожен ключ посилається на список клієнтів Перетворений на С # код демонструє, що ключове слово group створює новий список елементів, які обрабативтся в циклі, коли виконується оператор select

Код оператора select створює новий набір обєктів, які посилаються на ключ або групу і список клієнтів, які задовольняють зазначеним критеріям Перетворивши оператор select в псевдокод на С #, отримаємо код кшталт слующего:

List&ltobject&gt resultSet = new List&ltobject&gt() foreach (var key in groupedKeys) {

resultSetAdd(new { ShouldReward = key, Customers = grouped[key] })

}

Результатом виконання цього коду буде список обєктів, що містять розлити ключі і клієнтів, відповідних ключам Щоб обробити елементи

списку в циклі, потрібно реалізувати дворівневий цикл, вважаючи, що був застосува код LINQ, показаний на початку розділу:

foreach (var grouping in groupedCustomers) { ConsoleWriteLine(&quotShould be rewarded (&quot +

groupingShouldReward + &quot) &quot) foreach (var customer in groupingCustomers) {

ConsoleWriteLine(&quotCustomer (&quot + customerToString() + &quot)&quot)

}

}

Спочатку обробляються в циклі всі ключі, після чого обробляються в циклі всі клієнти, асоційовані з кожним ключем

Джерело: Гросс К С # 2008: Пер з англ – СПб: БХВ-Петербург, 2009 – 576 е: ил – (Самовчитель)

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*