Скачать презентацию LINQ Language Integrated Query Мова інтегрованих запитів Скачать презентацию LINQ Language Integrated Query Мова інтегрованих запитів

10Lektsia_Linq.ppt

  • Количество слайдов: 13

LINQ Language Integrated Query Мова інтегрованих запитів LINQ Language Integrated Query Мова інтегрованих запитів

Що таке LINQ ? Ø На конференції Microsoft Professional Developers Conference (PDC) 2005, Андерс Що таке LINQ ? Ø На конференції Microsoft Professional Developers Conference (PDC) 2005, Андерс Хейзберг і його команда представила новий підхід - Мову Інтегрованих Запитів (Language Integrated Query(LINQ)), який уніфікує шлях отримання даних в. NET. Ø Комбінування об’єктно-орієнтованої і реляційної технологій у одному підході наз. Моделлю об’єктнореляційного відображення. Ø LINQ дозволяє отримувати дані з будь-яких об’єктів, що реалізують інтерфейс IEnumerable Ø З LINQ масиви, колекції, реляційні дані і ХML є однаково можливими джерелами даних.

using System. Linq; string[] greetings={ using System. Linq; string[] greetings={"hello world", "hello LINQ", "hello Apress”}; var items = from s in greetings where s. Ends. With("LINQ") select s; foreach (var item in items) Console. Write. Line(item); hello LINQ

using System. Linq using System. Data. Linq Northwind db = new Northwind(@ using System. Linq using System. Data. Linq Northwind db = new Northwind(@"Data Source=. SQLEXPRESS; Initial Catalog=Northwind; Integrated Security=SSPI; "); var custs = from c in db. Customers where c. City == "Rio de Janeiro" select c; foreach (var cust in custs) Console. Write. Line("{0}", cust. Company. Name); Hanari Carnes Que Delicia Ricardo Adocicanos

The LINQ Project C# VB Others… . NET Language Integrated Query Standard Query Operators The LINQ Project C# VB Others… . NET Language Integrated Query Standard Query Operators DLinq (ADO. NET) XLinq (System. Xml) <author/> <year/> <price/> </book> Objects SQL Data. Set XML </p> </div> <div style="width: auto;" class="description columns twelve"><p><img class="imgdescription" title="LINQ Project Ø Мови, що забезпечують природню підтримку для LINQ: C# 3. 0 і" src="https://present5.com/presentation/-42712344_326951289/image-6.jpg" alt="LINQ Project Ø Мови, що забезпечують природню підтримку для LINQ: C# 3. 0 і" /> LINQ Project Ø Мови, що забезпечують природню підтримку для LINQ: C# 3. 0 і Visual Basic 9. 0. Ø Основні частини проекту LINQ: v LINQ до об’єктів ( Objects) - API, що забезпечує методи, які представляють множину операторів стандартних запитів (standard query operators (SQO) ) для отримання даних з будь-яких типів об’єктів, які реалізують інтерфейс IEnumerable<T>. Ці запити виконуються для даних в пам’яті. v LINQ до ADO. NET розширює SQO для роботи з реляційними даними: § LINQ до SQL ( DLinq) використовується для запитів реляційних баз, таких як Microsoft SQL Server. § LINQ дo Data. Set підтримують запити через використання Data. Set і Data. Tables ADO. NET §LINQ до … v LINQ до XML (XLinq) не тільки доповнює SQO але також включає керування XML-визначною особливістю для створення XML-документів і запитів до них. </p> </div> <div style="width: auto;" class="description columns twelve"><p><img class="imgdescription" title="Нововведення мови С# 3. 0 • Лямбда-вирази • Розширення методів c => c. Name" src="https://present5.com/presentation/-42712344_326951289/image-7.jpg" alt="Нововведення мови С# 3. 0 • Лямбда-вирази • Розширення методів c => c. Name" /> Нововведення мови С# 3. 0 • Лямбда-вирази • Розширення методів c => c. Name static void Dump(this object o); • Виведення типу локальної змінної • Ініціалізація об’єктів • Анонімні типи • Вирази-запити • Дерева виразів var x = 5; new Point { x = 1, y = 2 } new { c. Name, c. Phone } from … where … select Expression<T> </p> </div> <div style="width: auto;" class="description columns twelve"><p><img class="imgdescription" title="Лямбда-вирази • Лямбда-вирази спрощують програмування делегатів і анонімних методів. Вони замінюють функції, які можна" src="https://present5.com/presentation/-42712344_326951289/image-8.jpg" alt="Лямбда-вирази • Лямбда-вирази спрощують програмування делегатів і анонімних методів. Вони замінюють функції, які можна" /> Лямбда-вирази • Лямбда-вирази спрощують програмування делегатів і анонімних методів. Вони замінюють функції, які можна передавати як аргументи в методи (напр. предикати). • Розділений комами список параметрів, за яким слідує лямбда-операція, а за нею – вираз або блок операторів. • Тип і кількість параметрів та тип return_expr повинен відповідати прототипу делегата (par 1, par 2, …, par. N) => return_expr (par 1, par 2, …, par. N) => { operator 1; operator 2; … operator. N; return (return_expr); } // Приклад лямбда-виразу для // delegate bool fun(int x, int y); (x, y) => { if(x>y) return (x); else return(y); } </p> </div> <div style="width: auto;" class="description columns twelve"><p><img class="imgdescription" title="Ініціалізація об’єктів. Ø Ініціалізація об’єктів здійснюється як і при ініціалізації масиву без виклику конструкторів" src="https://present5.com/presentation/-42712344_326951289/image-9.jpg" alt="Ініціалізація об’єктів. Ø Ініціалізація об’єктів здійснюється як і при ініціалізації масиву без виклику конструкторів" /> Ініціалізація об’єктів. Ø Ініціалізація об’єктів здійснюється як і при ініціалізації масиву без виклику конструкторів чи встановленя властивостей класу. Ø Створюючи такий об’єкт, компілятор спочатку викликає конструктор за замовчуванням для даного класу, а далі проводить ініціалізацію вказаних полів. Непроініціалізовані поля приймають значення за замовчуванням для їх типів даних //ініціалізація об’єкту типу Point p 1=new Point{ x=1, y=4}; Ø Лише для тих колекцій, що реалізують інтерфейс Сollections. Generic. ICollection<T> //ініціалізація списку з об’єктів типу Person List<Person> people = new List<Person> { new Person() { ID = 1, IDRole = 1, Last. Name = "Anderson", First. Name = "Brad"}, new Person() { ID = 2, IDRole = 2, Last. Name = "Gray", First. Name = "Tom"} }; </p> </div> <div style="width: auto;" class="description columns twelve"><p><img class="imgdescription" title="Виведення типу локальної змінної Ø Виведення типу змінної здійснюється на основі типу даних, яким" src="https://present5.com/presentation/-42712344_326951289/image-10.jpg" alt="Виведення типу локальної змінної Ø Виведення типу змінної здійснюється на основі типу даних, яким" /> Виведення типу локальної змінної Ø Виведення типу змінної здійснюється на основі типу даних, яким змінна буде проініціалізована (на етапі компіляції) Ø Тому виведення типу можливе лише при умові одночасної ініціалізації змінної var i = 5; //еквівалентно int i = 5; var s = “ring"; //еквівалентно string s = “ring"; var p; // error Ø Виведення типу змінної є особливо корисним для результатів складних запитів, оскільки це виключає необхідність визначати тип для кожного результату Ø Неявно типізована локальна змінна не може бути використана як параметр методу </p> </div> <div style="width: auto;" class="description columns twelve"><p><img class="imgdescription" title="Анонімні типи var person=new{First. Name=“Ira”, Last. Name=“Ratiz”}; Console. Write. Line(person. First. Name+” “+person. Last." src="https://present5.com/presentation/-42712344_326951289/image-11.jpg" alt="Анонімні типи var person=new{First. Name=“Ira”, Last. Name=“Ratiz”}; Console. Write. Line(person. First. Name+” “+person. Last." /> Анонімні типи var person=new{First. Name=“Ira”, Last. Name=“Ratiz”}; Console. Write. Line(person. First. Name+” “+person. Last. Name); Ø Анонімний тип не має назви і генерується компілятором на основі ініціалізації створюваного екземпляру об’єкта internal class ? ? ? { private string _first. Name; private string _last. Name; public string First. Name { get { return _first. Name; } set { first. Name = value; } } public string Last. Name { get { return _last. Name; } set { last. Name = value; } } } </p> </div> <div style="width: auto;" class="description columns twelve"><p><img class="imgdescription" title="Розширення методів Ø Розширення методів поширює існуючі. NET типи новими методами. Ø Наприклад, можна" src="https://present5.com/presentation/-42712344_326951289/image-12.jpg" alt="Розширення методів Ø Розширення методів поширює існуючі. NET типи новими методами. Ø Наприклад, можна" /> Розширення методів Ø Розширення методів поширює існуючі. NET типи новими методами. Ø Наприклад, можна поширити тип string новим методом , який замінює кожен пропуск в рядку на знак підкреслення. public static string Space. To. Underscore(this string source) {. . } Ø this, записаний перед першим параметром методу, вказує компілятору на тип, який ми хочемо розширити. Ø Метод і його клас повинні бути статичними. ØМетод Space. To. Underscore() надалі можна використовувати як і інші методи класу string. Ø При умові існування однойменного розширеного і власного методу, перевага віддається власному. Не можна розширювати властивості, події та оператори ØОператори стандартних запитів (where, select) розширюють інтерфейс IEnumerable<T> </p> </div> <div style="width: auto;" class="description columns twelve"><p><img class="imgdescription" title="static class Ex_str { public static string Space. To. Underscore(this string source) { //……………" src="https://present5.com/presentation/-42712344_326951289/image-13.jpg" alt="static class Ex_str { public static string Space. To. Underscore(this string source) { //……………" /> static class Ex_str { public static string Space. To. Underscore(this string source) { //…………… } }; class Program { static void Main(string[] args) { string ss 1 = "Like static method"; ss 1=Ex_str. Space. To. Underscore(ss 1); Console. Write. Line(ss 1); string ss 2 = "Like instance method"; ss 2=ss 2. Space. To. Underscore(); Console. Write. Line(ss 2); } } </p> </div> <div style="width: auto;" class="description columns twelve"><p><img class="imgdescription" title="" src="" alt="" /> </p> </div> </div> <div id="inputform"> <script>$("#inputform").load("https://present5.com/wp-content/plugins/report-content/inc/report-form-aj.php"); </script> </div> </p> <!--end entry-content--> </div> </article><!-- .post --> </section><!-- #content --> <div class="three columns"> <div class="widget-entry"> </div> </div> </div> </div> <!-- #content-wrapper --> <footer id="footer" style="padding: 5px 0 5px;"> <div class="container"> <div class="columns twelve"> <!--noindex--> <!--LiveInternet counter--><script type="text/javascript"><!-- document.write("<img src='//counter.yadro.ru/hit?t26.10;r"+ escape(document.referrer)+((typeof(screen)=="undefined")?"": ";s"+screen.width+"*"+screen.height+"*"+(screen.colorDepth? screen.colorDepth:screen.pixelDepth))+";u"+escape(document.URL)+ ";"+Math.random()+ "' alt='' title='"+" ' "+ "border='0' width='1' height='1'><\/a>") //--></script><!--/LiveInternet--> <a href="https://slidetodoc.com/" alt="Наш международный проект SlideToDoc.com!" target="_blank"><img src="https://present5.com/SlideToDoc.png"></a> <script> $(window).load(function() { var owl = document.getElementsByClassName('owl-carousel owl-theme owl-loaded owl-drag')[0]; document.getElementById("owlheader").insertBefore(owl, null); $('#owlheader').css('display', 'inline-block'); }); </script> <script type="text/javascript"> var yaParams = {'typepage': 'parserexe3', 'author': 'parserexe3' }; </script> <!-- Yandex.Metrika counter --> <script type="text/javascript" > (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)}; m[i].l=1*new Date(); for (var j = 0; j < document.scripts.length; j++) {if (document.scripts[j].src === r) { return; }} k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)}) (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym"); ym(32395810, "init", { clickmap:true, trackLinks:true, accurateTrackBounce:true, webvisor:true }); </script> <noscript><div><img src="https://mc.yandex.ru/watch/32395810" style="position:absolute; left:-9999px;" alt="" /></div></noscript> <!-- /Yandex.Metrika counter --> <!--/noindex--> <nav id="top-nav"> <ul id="menu-top" class="top-menu clearfix"> </ul> </nav> </div> </div><!--.container--> </footer> <script type='text/javascript'> /* <![CDATA[ */ var wpcf7 = {"apiSettings":{"root":"https:\/\/present5.com\/wp-json\/contact-form-7\/v1","namespace":"contact-form-7\/v1"}}; /* ]]> */ </script> <script type='text/javascript' src='https://present5.com/wp-content/plugins/contact-form-7/includes/js/scripts.js?ver=5.1.4'></script> <script type='text/javascript' src='https://present5.com/wp-content/themes/sampression-lite/lib/js/jquery.shuffle.js?ver=4.9.26'></script> <script type='text/javascript' src='https://present5.com/wp-content/themes/sampression-lite/lib/js/scripts.js?ver=1.13'></script> <script type='text/javascript' src='https://present5.com/wp-content/themes/sampression-lite/lib/js/shuffle.js?ver=4.9.26'></script> <!--[if lt IE 9]> <script type='text/javascript' src='https://present5.com/wp-content/themes/sampression-lite/lib/js/selectivizr.js?ver=1.0.2'></script> <![endif]--> <script type='text/javascript' src='https://present5.com/wp-content/themes/sampression-lite/lib/js/notify.js?ver=1738228047'></script> <script type='text/javascript'> /* <![CDATA[ */ var my_ajax_object = {"ajax_url":"https:\/\/present5.com\/wp-admin\/admin-ajax.php","nonce":"fe28922a65"}; /* ]]> */ </script> <script type='text/javascript' src='https://present5.com/wp-content/themes/sampression-lite/lib/js/filer.js?ver=1738228047'></script> </body> </html>