Въведение в заявки LINQ (C #)
Искането е израз, която извлича данни от източника на данни. Заявки обикновено се изразяват в специална заявка език. С течение на времето, те разработват различни езици за различни видове източници на данни, като например SQL за релационни бази данни и XQuery за XML. По този начин, разработчиците са принудени да научат нов език за заявки за всеки вид източник на данни или формат на данните, които те трябва да се подкрепят. LINQ опростява ситуацията, като предлага последователен модел за работа с данни в най-различни източници на данни и формати. заявка работи LINQ винаги се извършва с обектите. За запитвания и трансформации на данни в XML-документи, SQL бази данни, набори от данни на ADO.NET, .NET колекции и някакъв друг формат, за които е налична LINQ доставчик, използват едни и същи основни модели за кодиране.
Следващата фигура показва пълна искането за експлоатация. Изпълнението на LINQ заявка е различен от заявката; с други думи, създаването на самата променлива заявка не е свързан с получаването на данни.
В предишния пример, източник на данни е масив, така че безусловно подкрепя родово IEnumerable интерфейса
За искания тип служи като източник на данни LINQ не изисква промени или специален режим на работа. Ако данните за източник не е вече в памет под формата на заявения тип, доставчикът LINQ е да го представят като такива. Например, LINQ към XML зарежда XML-документ искания тип XElement на.
Използването на LINQ към SQL, първо се създаде обект-релационни съответствия в режим на развитие ръчно или с помощта на Object Relational дизайнер. Напиши искания към обекти и по време на изпълнение LINQ към SQL ще си взаимодействат с базата данни. Клиентите Следващият пример е специфичен маса в базата данни, и вида на резултатния IQueryable
За повече информация за това как да създадете специфични видове източници на данни, вижте. Документация за различните доставчици LINQ. Основното правило е много проста: източник на данни за LINQ - е всеки обект, който поддържа универсален интерфейс IEnumerable
Видове като ArrayList. nonuniversal подкрепи IEnumerable интерфейса. Тя може също да се използва като източници на данни, LINQ. За повече информация, вижте. В Как. Работещи заявка с ArrayList с LINQ.
Искането показва вида на информацията, която искате да се извлече от източника или източниците на данни. Ако е необходимо, по искане също така определя метода за сортиране, и формирането на групи от такава информация, преди да се върне. Искането се съхранява в променлива заявка и изразяване заявка се инициализира. За да направи по-лесно да се напише заявки в C #, нов синтаксис заявка.
Искането от първия пример връща всички четни числа от масив от цели числа. изразяване заявка съдържа три предложения: от. където и да изберете. (Ако знаете SQL, вие имате предвид, че процедурата, предлага обратен ред в SQL.) От клауза уточнява източника на данни, където клауза клауза се прилага филтър, и изберете клауза определя типа на върнатите предмети. Тези и други предложения заявки описани подробно в LINQ Запитване Expressions (Ръководство за програмиране C #). Важно е, че самата променлива заявка LINQ отнема никакви действия и не върна данни. То просто съхранява информацията, необходима за предоставяне на резултатите следващия път, когато стартирате заявката. За повече информация относно изграждането на заявки, вижте. В Разбирането Стандартни Критерии оператори.
Заявки могат също да бъдат изразени чрез използване на метод синтаксис. За повече информация, вижте. В секцията сравняване синтаксис LINQ заявка и начин синтаксис (C #).
разсрочено изпълнение
Както бе споменато по-рано, се променливата на заявка съхранява само командите на заявката. Реалното изпълнение на искането, се забави до обхождане на променливата на заявка в изявление на foreach. Тази концепция се нарича отложено изпълнение. е показано в следващия пример.
Отчетът за foreach е и мястото, където се изтеглят резултатите от заявките. Например, предходната заявка променливата бр съдържа всяка итерация (в ред) стойността в връща последователност.
Защото самата променлива заявка никога не съдържа резултатите от заявката, може да се извършва толкова често, колкото е необходимо. Например, ако базата данни се обновява постоянно отделно заявление. Приложението може да се създаде заявка, която извлича най-новите данни, и то може да се извърши отново с определен интервал, за да изтеглите различни резултати всеки път.
Принудително незабавно изпълнение
Заявки, които изпълняват функции на агрегацията в диапазон от източници елементи трябва първо да превъртите тези елементи. Примери на такива заявки са Count. Макс. Средна и Първа. Те се изпълняват без изрично foreach оператора. тъй като искането се да използвате foreach да се върне резултат. Моля, имайте предвид, че този тип заявка връща една стойност, а не сбор от IEnumerable. Следната заявка връща броя на четни числа в източник на масива.