I BOB bo’yicha qisqacha xulosa
Birinchi bobda reja sifatida qabul qilingan mavzular doirasida fikr yuritar ekanman,kiritilgan misollar va namunalar mavzuning dolzarbligini yana bir bor isbotladi.Birinchi bob o’z ichiga uchta rejani qamrab oldi. LINQ texnologiyalari tavsifiga atroflicha yondashilib,umumiy tiplar(Generics) tahlil qilindi.So’rovlar yaratish jarayonidagi asosiy amallarning tahlili keltirildi.Va ushbu bobda egallangan bilimlar keyingi bob uchun poydevor bo’lishiga erishildi.
Muhim operatorlarning ishlatilishi,amaliy masalalardagi ahamiyati atroflicha o’rganib chiqildi.
II BOB
LINQ texnologiyasining amaliy masalalarga tadbiq etilishi va namunaviy masalala
2.1.LINQ texnologiyasi yordamida ma’lumotlarga o’zgartirishlar kiritish
Language-Integrated Query (LINQ) faqat ma'lumotlarni olish bilangina bog’liq emas. Balki shuningdek, ma'lumotlarni o'zgartirish uchun kuchli vosita hamdir. LINQ so'rovidan foydalanib, ma’lum bir ketma-ketlikni kiritish uchun ishlatishingiz va yangi chiqish ketma-ketligini yaratish uchun uni ko'p jihatdan o'zgartirishingiz mumkin. Saralash va guruhlash orqali elementlarning o'zini o'zgartirmasdan ketma-ketlikni o'zgartirishingiz mumkin. Lekin LINQ so'rovlarining eng kuchli xususiyati yangi tiplarni yaratish qobiliyatidir. Bu esa select qismida amalga oshiriladi. Masalan quyidagilarni bajarish mumkin:
Bir nechta kiritiladigan ketma-ketlikni yangi tipga ega bo’lgan bitta chiquvchi ketma-ketlikka birlashtirish.
Elementlari manba ketma-ketligidagi har bir elementning faqat bitta yoki bir nechta xossalaridan iborat chiquvchi ketma-ketliklarni yaratish.
Elementlari manba ma’lumotlarida bajarilgan operatsiyalar natijalaridan iborat bo’lgan chiquvchi ketma-ketliklarini yarating.
Boshqa formatdagi chiquvchi ketma-ketlikni yaratish. Masalan,SQL satrlari yoki matnli fayllardan ma’lumotlarni XML ga o’zgartirish ham mumkin.
Bu shunchaki bir nechta misollar xolos. Albatta, bu o'zgarishlarni bir xil so'rovda turli usullar bilan birlashtirish mumkin. Bundan tashqari, bitta so'rovning chiquvchi ketma-ketligi yangi so'rov uchun kirish ketma-ketligi sifatida ishlatilishi ham mumkin. Bir nechta kirish ketma-ketligi elementlarini o'z ichiga olgan chiqish ketma-ketligini yaratish uchun LINQ so'rovidan foydalanish anchagina qulay bo’lib hisoblanadi. Quyidagi misol ikkita xotiradagi ma'lumotlar tuzilmalarini qanday birlashtirishni ko'rsatadi, XML yoki SQL yoki DataSet manbalaridan ma'lumotlarni birlashtirish uchun ham xuddi shu tamoyillarni qo'llash mumkin:
class Student
{
public string First { get; set; }
public string Last {get; set;}
public int ID { get; set; }
public string Street { get; set; }
public string City { get; set; }
public List Scores;
}
class Teacher
{
public string First { get; set; }
public string Last { get; set; }
public int ID { get; set; }
public string City { get; set; }
}
Keyingi namunada esa biz so’rovni ko’rishimiz mumkin:
class DataTransformations
{
static void Main()
{
// Create the first data source.
List students = new List()
{ new Student { First="Svetlana",
Last="Omelchenko",
ID=111,
Street="123 Main Street",
City="Seattle",
Scores= new List { 97, 92, 81, 60 } },
new Student { First="Claire",
Last="O’Donnell",
ID=112,
Street="124 Main Street",
City="Redmond",
Scores= new List { 75, 84, 91, 39 } },
new Student { First="Sven",
Last="Mortensen",
ID=113,
Street="125 Main Street",
City="Lake City",
Scores= new List { 88, 94, 65, 91 } },
};
// Create the second data source.
List teachers = new List()
{
new Teacher { First="Ann", Last="Beebe", ID=945, City="Seattle" },
new Teacher { First="Alex", Last="Robinson", ID=956, City="Redmond" },
new Teacher { First="Michiyo", Last="Sato", ID=972, City="Tacoma" }
};
// Create the query.
var peopleInSeattle = (from student in students
where student.City == "Seattle"
select student.Last)
.Concat(from teacher in teachers
where teacher.City == "Seattle"
select teacher.Last);
Console.WriteLine("The following students and teachers live in Seattle:");
// Execute the query.
foreach (var person in peopleInSeattle)
{
Console.WriteLine(person);
}
Console.WriteLine("Press any key to exit.");
Console.ReadKey();
}
}
/* Output:
The following students and teachers live in Seattle:
Omelchenko
Beebe
*/
Manba ketma-ketligidagi har bir elementning kichik to'plamini tanlashning ikkita asosiy usuli mavjud:
Manba elementining faqat bitta a'zosini tanlash uchun nuqta operatsiyasidan foydalanish kerak. Quyidagi misolda, Mijoz ob’ekti bir nechta umumiy xususiyatlarni o'z ichiga oladi, shu jumladan City nomli qatorni ham. Bajarilganda, bu so'rov satrlarning chiquvchi ketma-ketligini ishlab chiqaradi.
var query = from cust in Customers
select cust.City;
2. Manba elementidan bir nechta xususiyatni o'z ichiga olgan elementlarni yaratish uchun nomlangan ob'ekt yoki anonim turdagi ob'ektni initsializatsiya qiluvchidan foydalanish mumkin. Quyidagi misolda har bir Customer elementidan ikkita xususiyatni inkapsulyatsiya qilish uchun anonim turdan foydalanishi ko‘rsatilgan:
var query = from cust in Customer
select new {Name = cust.Name, City = cust.City};
LINQ so'rovlari xotiradagi ma'lumotlar tuzilmalari, SQL ma'lumotlar bazalari, ADO.NET ma'lumotlar to'plamlari va XML hujjatlari orasida ma'lumotlarni o'zgartirishni osonlashtiradi. Quyidagi misol xotiradagi ma'lumotlar strukturasidagi ob’ektlarni XML elementlariga aylantiradi:
class XMLTransform
{ static void Main()
{
// Create the data source by using a collection initializer.
// The Student class was defined previously in this topic.
List students = new List()
{
new Student {First="Svetlana", Last="Omelchenko", ID=111, Scores = new List{97, 92, 81, 60}},
new Student {First="Claire", Last="O’Donnell", ID=112, Scores = new List{75, 84, 91, 39}},
new Student {First="Sven", Last="Mortensen", ID=113, Scores = new List{88, 94, 65, 91}},
};
// Create the query.
var studentsToXML = new XElement("Root",
from student in students
let scores = string.Join(",", student.Scores)
select new XElement("student",
new XElement("First", student.First),
new XElement("Last", student.Last),
new XElement("Scores", scores))
// end "student" );
// end "Root"
// Execute the query.
Console.WriteLine(studentsToXML);
// Keep the console open in debug mode.
Console.WriteLine("Press any key to exit.");
Console.ReadKey();
}
}
Kod esa quyidagi XML natijani keltirib chiqaradi:
Svetlana
Omelchenko
97,92,81,60
Claire
O'Donnell
75,84,91,39
Sven
Mortensen
88,94,65,91
Chiqish ketma-ketligi(output squence) manba ketma-ketligidan hech qanday element yoki element xususiyatlarini o'z ichiga olmaydi. Buning o’rniga chiqish manba elementlaridan kirish argumentlari sifatida foydalanish uchun qiymatlar ketma-ketligi olinishi mumkin.Quyidagi so'rov doiralar radiuslarini ifodalovchi raqamlar ketma-ketligini oladi, har bir radius uchun maydonni hisoblaydi va hisoblangan maydon bilan formatlangan satrlarni o'z ichiga olgan chiqish ketma-ketligini qaytaradi:
class FormatQuery
{ static void Main()
{
// Data source.
double[] radii = { 1, 2, 3 };
// LINQ query using method syntax.
IEnumerable output =
radii.Select(r => $"Area for a circle with a radius of '{r}' = {r * r * Math.PI:F2}");
/*
// LINQ query using query syntax.
IEnumerable output =
from rad in radii
select $"Area for a circle with a radius of '{rad}' = {rad * rad * Math.PI:F2}";
*/
foreach (string s in output)
{
Console.WriteLine(s);
}
// Keep the console open in debug mode.
Console.WriteLine("Press any key to exit.");
Console.ReadKey() }}
/* Output:
Area for a circle with a radius of '1' = 3.14
Area for a circle with a radius of '2' = 12.57
Area for a circle with a radius of '3' = 28.27*/
Dostları ilə paylaş: |