C# პროგრამირების საფუძვლები: LINQ და Entity Framework. ჩელენჯი #55
შესავალი
ამ სახელმძღვანელოში ვისწავლით, როგორ ვიმუშაოთ მონაცემებთან C#-ში. წარმოიდგინეთ, რომ გაქვთ ბევრი ინფორმაცია (მაგალითად, მომხმარებლების სია) და გინდათ ამ ინფორმაციის მოწესრიგება, დახარისხება ან გაფილტვრა. სწორედ ამაში გვეხმარება LINQ და Entity Framework.
1. LINQ Introduction (LINQ-ის შესავალი)
რა არის LINQ?
LINQ არის როგორც ენა პროგრამირების ენაში. წარმოიდგინეთ, რომ გაქვთ სხვადასხვა ტიპის "კონტეინერები" ინფორმაციით:
LINQ საშუალებას გვაძლევს ვიმუშაოთ ყველა ამ "კონტეინერთან" ერთი და იმავე გზით.
მარტივი მაგალითი:
// ჩვეულებრივი სია რიცხვებით
List<int> ricxvebi = new List<int> { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
// LINQ-ით ვიპოვოთ ლუწი რიცხვები
var luwiRicxvebi = from ricxvi in ricxvebi
where ricxvi % 2 == 0
select ricxvi;
2. LINQ Query Tools (LINQ-ის მოთხოვნის ინსტრუმენტები)
LINQ-ს აქვს ორი სტილი კოდის წერის:
1. Query Syntax (SQL-ის მსგავსი სტილი)
var shedegiA = from studenti in studentebi
where studenti.Asaki > 18
select studenti.Saxeli;
2. Method Syntax (მეთოდების სტილი)
var shedegiB = studentebi
.Where(studenti => studenti.Asaki > 18)
.Select(studenti => studenti.Saxeli);
ორივე სტილი ერთსა და იმავე შედეგს იძლევა. აირჩიეთ ის, რომელიც თქვენთვის უფრო გასაგებია.
3. LINQ Query (LINQ მოთხოვნა)
LINQ მოთხოვნა შედგება სამი მთავარი ნაწილისგან:
1. მონაცემთა წყარო (from)
from wigni in wignebisList
2. ფილტრაცია (where)
where wigni.Fasi < 20
3. შედეგის ფორმირება (select)
select wigni.Satauri
სრული მაგალითი:
var iafiWignebi = from wigni in wignebisList
where wigni.Fasi < 20
select new { wigni.Satauri, wigni.Fasi };
4. LINQ Operators (LINQ ოპერატორები)
ფილტრაციის ოპერატორები
var zrdasruliStudentebi = studentebi.Where(s => s.Asaki >= 18);
var mxolodStringebi = sherevilinSia.OfType<string>();
დახარისხების ოპერატორები
var dalagebuli = studentebi.OrderBy(s => s.Saxeli);
var ukuRma = studentebi.OrderByDescending(s => s.Qula);
აგრეგაციის ოპერატორები
var saSualoQula = studentebi.Average(s => s.Qula);
var studentebisSul = studentebi.Count();
5. LINQ Joins (LINQ გაერთიანებები)
გაერთიანებები გვჭირდება, როცა გვინდა სხვადასხვა სიების დაკავშირება.
მაგალითი:
public class Studenti
{
public int Id { get; set; }
public string Saxeli { get; set; }
public int KursiId { get; set; }
}
public class Kursi
{
public int Id { get; set; }
public string Dasaxeleba { get; set; }
}
// გაერთიანების მაგალითი
var studentiDaKursi = from s in studentebi
join k in kursebi
on s.KursiId equals k.Id
select new {
StudentisSaxeli = s.Saxeli,
Kursi = k.Dasaxeleba
};
6. O/RM (Object-Relational Mapping)
O/RM არის ტექნოლოგია, რომელიც გვეხმარება მონაცემთა ბაზასთან მუშაობაში. ის აკავშირებს:
წარმოიდგინეთ "მთარგმნელი", რომელიც:
7. Entity Framework
Entity Framework არის Microsoft-ის O/RM ინსტრუმენტი. ის გვეხმარება:
მთავარი კომპონენტები:
8. Working with Entity Framework (Entity Framework-თან მუშაობა)
// მოდელის კლასი
public class Studenti
{
public int Id { get; set; }
public string Saxeli { get; set; }
public int Asaki { get; set; }
}
// კონტექსტის კლასი
public class SkolaContext : DbContext
{
public DbSet<Studenti> Studentebi { get; set; }
}
// გამოყენების მაგალითი
using (var context = new SkolaContext())
{
// ახალი სტუდენტის დამატება
var axaliStudenti = new Studenti
{
Saxeli = "გიორგი",
Asaki = 20
};
context.Studentebi.Add(axaliStudenti);
context.SaveChanges();
// სტუდენტების წაკითხვა
var yvela = context.Studentebi.ToList();
}
9. Database First Approach (მონაცემთა ბაზიდან მოდელებში)
ეს მიდგომა გამოიყენება, როცა:
პროცესი:
// მაგალითი როგორ გამოვიყენოთ
Scaffold-DbContext "Server=.\SQLEXPRESS;Database=Skola;Trusted_Connection=True;" Microsoft.EntityFrameworkCore.SqlServer
10. Model First Approach (მოდელებიდან ბაზაში)
ეს მიდგომა გამოიყენება, როცა:
მაგალითი:
public class Wigni
{
public int Id { get; set; }
public string Satauri { get; set; }
public string Avtori { get; set; }
public decimal Fasi { get; set; }
}
public class BiblioTekaContext : DbContext
{
public DbSet<Wigni> Wignebi { get; set; }
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<Wigni>()
.Property(w => w.Fasi)
.HasPrecision(18, 2);
}
}
მაგალითი: მარტივი წიგნების მაღაზია
// მოდელები
public class Wigni
{
public int Id { get; set; }
public string Satauri { get; set; }
public string Avtori { get; set; }
public decimal Fasi { get; set; }
public int RaodenobaSawyobshi { get; set; }
}
public class WignebisMagazia
{
private readonly List<Wigni> _wignebi;
public WignebisMagazia()
{
_wignebi = new List<Wigni>();
}
// წიგნის დამატება
public void DaamateWigni(Wigni wigni)
{
_wignebi.Add(wigni);
}
// იაფი წიგნების პოვნა (20 ლარზე ნაკლები)
public List<Wigni> IpoveIafiWignebi()
{
return _wignebi.Where(w => w.Fasi < 20).ToList();
}
// წიგნების დახარისხება ფასის მიხედვით
public List<Wigni> DaalageWignebiFasismixedvit()
{
return _wignebi.OrderBy(w => w.Fasi).ToList();
}
// კონკრეტული ავტორის წიგნების პოვნა
public List<Wigni> IpoveAvtorisWignebi(string avtori)
{
return _wignebi
.Where(w => w.Avtori.Contains(avtori))
.ToList();
}
}
სავარჯიშო დავალება
შექმენით მარტივი სტუდენტების მართვის სისტემა, რომელშიც იქნება:
დასკვნა
LINQ და Entity Framework არის ძალიან მნიშვნელოვანი ინსტრუმენტები C# დეველოპერისთვის, რადგან: