Знайомство з LINQ в Visual C # (Sharp)

У попередньому розділі ми дізналися, як звертатися до бази даних за допомогою традіонних технологій ADONET При запиті ADONET викликаються процедури яза SQL, а повернутий набір результатів впорядковується також за допомогою SQL

Мова LINQ (Language Integrated Query, мова інтегрованих запитів) дозволяє організовувати результати запиту в уніфікованого форматі, незалежно від іочніка даних Питається, навіщо потрібна ще одна технологія запитів Відповідь на це питання має відношення до мови XML

Мова XML призначений для представлення інформації в ієрархічному поря Приклад використання XML був розглянутий у чолі 12За допомогою мови XML багато проблем вирішуються елегантним і легко розуміється чином ГІМ з рішень, пропонованих XML, є можливість звертатися до інфоаціі у форматі XML за допомогою мови XPath, який, в свою чергу, позволт звертатися до структури обєкта, використовуючи набір фільтрів За допомогою мови XPath можна знайти будь-який елемент, а фільтри можуть включати залежні елемеи, що не дуже легко здійснити в інших технологіях Простими словами, XPath і XML є дуже потужними технологіями для пошуку інформації

Ці дві мови можна розглядати як надихнули створення мови LINQ Але LINQ відрізняється від XML і XPath тим, що за допомогою LINQ можна звертатися до обєктів С #, документам XML і реляційних баз даних, тобто LINQ можна розглядати як загальний механізм для виконання пошуку в ієрархії інформації У цій главі основна увага приділяється поясненню механіки мови LINQ і донстраціі запитів і використання методів, повязаних з бібліотекою LINQ

Додаток передбачення лотерейних номерів, з яким ми працювали в предущіх главах, зберігає виграшні номери лотереї для кожного розіграшу, щоб на їх основі спробувати передбачити виграшні номери наступного розриша Ідея додатка полягає у виявленні закономірностей Знову ж,

дійсність така, що номери в кожному розіграші випадають на проіольной основі, тому, навіть якщо ви і зможете виявити закономірності в номерах попередніх розіграшів, це не означає, що ви зможете передбачити номера наступного розіграшу Але інтерес в цій проблемі представляє те, що ми можемо використовувати мову LINQ для маніпулювання даними Мова LINQ дозволяє зберігати дані у вигляді обєктів і виконувати SQL-і XPath-подібні операції, як буде показано в цій главі У чолі 10 була розглянута архітекта потоків, де консольний додаток прочитував і виводило текстові дані Там же були показані приклади перетворень текстових даних в двійкові і навпаки Додаток, з яким ми будемо працювати в цьому розділі (проект FrequencyProcessor), зчитує текстові дані, обробляє їх і генерує текстовий результат Таким чином, нам потрібен інтерфейс текст – текст, котий був визначений у чолі 10 так:

public interface IProcessor { string Process(string input)

}

Вхідними даними є наступний текстовий потік:

20060311 3 7 15 28 30 38 44 20060315 10 18 30 34 41 43 5

20060318 3 11 12 16 20 40 9

20060322 2 3 7 13 42 43 41

20060325 3 10 36 40 43 44 35

20060329 3 4 8 16 34 39 45

Якщо ми хочемо знайти частоту випадання окремих номерів, то дані можна проаналізувати за окремим номерам, збільшуючи значення лічильника для каого нового випадку кожного номера Цю операцію можна виконати за допомогою наступного коду:

string[] splitUpText = lineOfTextSplit(new char[] {‘}) frequency[intParse(splitUpText[0])] ++

frequency[int Pairse (splitUpText [ 1 ] ) ] ++

Рядок тексту розбивається на окремі фрагменти, що містять число в текст формі, яке потім перетворюється у власне число і використовується в кестве індексу для підрахунку частоти входжень даного числа Це рішення раба і досить швидко, але має одну велику проблему: воно не розширюваністю Його можна застосувати для вирішення однієї і тільки однієї проблеми

Скажімо, нам потрібно обчислити іншу статистичну інформацію: які числа комбінації зустрічаються найбільш часто Застосування попереднього рішення вимагало б повторного перетворення текстового потоку, що є трудмкім і дорогим рішенням Кращим підходом було б перетворити Тетово потік в послідовність обєктів, які можна обробляти

Але наша нагальна проблема полягає тільки в підрахунку частоти входження окремих номерів Навіщо ж тоді прикладати зайві зусилля в пошуках решія, відповідного для інших проблем, якщо дане рішення повністю вирішує поточну проблему Потім, що створення якісного коду означає застосування спільного, але специфічного підходу до вирішення проблем Код повинен бути спеціческім, щоб ми не загрузли в обмірковуванні подробиць в майбутньому в той же самий час код повинен бути досить загальним, щоб додаткові Требова в майбутньому не змусили нас повністю переписувати додаток Спосоость передбачити, коли писати специфічний код, а коли загальний, по суті, є справою досвіду, і єдиний спосіб придбати його – працювати, раба і знову працювати з написання коду

Джерело: Гросс К С # 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>

*

*