C# პროგრამირების საფუძვლები: LINQ და Entity Framework. ჩელენჯი #55

C# პროგრამირების საფუძვლები: LINQ და Entity Framework. ჩელენჯი #55

შესავალი

ამ სახელმძღვანელოში ვისწავლით, როგორ ვიმუშაოთ მონაცემებთან C#-ში. წარმოიდგინეთ, რომ გაქვთ ბევრი ინფორმაცია (მაგალითად, მომხმარებლების სია) და გინდათ ამ ინფორმაციის მოწესრიგება, დახარისხება ან გაფილტვრა. სწორედ ამაში გვეხმარება LINQ და Entity Framework.

1. LINQ Introduction (LINQ-ის შესავალი)

რა არის LINQ?

LINQ არის როგორც ენა პროგრამირების ენაში. წარმოიდგინეთ, რომ გაქვთ სხვადასხვა ტიპის "კონტეინერები" ინფორმაციით:

  • სიები (Lists)
  • მასივები (Arrays)
  • მონაცემთა ბაზები
  • XML ფაილები

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 ოპერატორები)

ფილტრაციის ოპერატორები

  • Where: გაფილტვრა პირობის მიხედვით

var zrdasruliStudentebi = studentebi.Where(s => s.Asaki >= 18);        

  • OfType: გაფილტვრა ტიპის მიხედვით

var mxolodStringebi = sherevilinSia.OfType<string>();        

დახარისხების ოპერატორები

  • OrderBy: ზრდადობით დახარისხება

var dalagebuli = studentebi.OrderBy(s => s.Saxeli);        

  • OrderByDescending: კლებადობით დახარისხება

var ukuRma = studentebi.OrderByDescending(s => s.Qula);        

აგრეგაციის ოპერატორები

  • Count: რაოდენობის დათვლა
  • Sum: ჯამი
  • Average: საშუალო
  • Min/Max: მინიმუმი/მაქსიმუმი

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 არის ტექნოლოგია, რომელიც გვეხმარება მონაცემთა ბაზასთან მუშაობაში. ის აკავშირებს:

  • კლასებს C#-ში
  • ცხრილებს მონაცემთა ბაზაში

წარმოიდგინეთ "მთარგმნელი", რომელიც:

  • C# ობიექტებს გადაTargmnis SQL მოთხოვნებად
  • SQL მონაცემებს გადაTargmnis C# ობიექტებად


7. Entity Framework

Entity Framework არის Microsoft-ის O/RM ინსტრუმენტი. ის გვეხმარება:

  • მონაცემთა ბაზასთან მუშაობაში
  • მონაცემების ავტომატურ სინქრონიზაციაში
  • კოდის მარტივად წერაში


მთავარი კომპონენტები:

  1. DbContext: მთავარი კლასი მონაცემთა ბაზასთან სამუშაოდ
  2. DbSet: წარმოადგენს ცხრილს მონაცემთა ბაზაში
  3. Entity: მოდელის კლასი, რომელიც წარმოადგენს ცხრილის სტრუქტურას


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 (მონაცემთა ბაზიდან მოდელებში)

ეს მიდგომა გამოიყენება, როცა:

  • უკვე გვაქვს მონაცემთა ბაზა
  • გვინდა მისგან C# კლასების ავტომატურად შექმნა

პროცესი:

  1. დავაკავშირდით არსებულ მონაცემთა ბაზას
  2. გამოვიყენეთ Entity Framework ინსტრუმენტები
  3. ავტომატურად შეიქმნება C# კლასები

// მაგალითი როგორ გამოვიყენოთ
Scaffold-DbContext "Server=.\SQLEXPRESS;Database=Skola;Trusted_Connection=True;" Microsoft.EntityFrameworkCore.SqlServer        


10. Model First Approach (მოდელებიდან ბაზაში)

ეს მიდგომა გამოიყენება, როცა:

  • ვიწყებთ ახალ პროექტს
  • ჯერ ვწერთ C# კლასებს
  • შემდეგ ავტომატურად იქმნება მონაცემთა ბაზა

მაგალითი:

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();
    }
}        

სავარჯიშო დავალება

შექმენით მარტივი სტუდენტების მართვის სისტემა, რომელშიც იქნება:

  1. სტუდენტების კლასი შემდეგი თვისებებით: Id სახელი გვარი ასაკი საშუალო ქულა
  2. იმპლემენტაცია შემდეგი ფუნქციონალის: სტუდენტების დამატება წაშლა რედაქტირება ძებნა სახელით დახარისხება ქულების მიხედვით საშუალო ქულის გამოთვლა მთელი კლასისთვის

დასკვნა

LINQ და Entity Framework არის ძალიან მნიშვნელოვანი ინსტრუმენტები C# დეველოპერისთვის, რადგან:

  1. ამარტივებს მონაცემებთან მუშაობას
  2. ამცირებს კოდის წერის დროს
  3. აუმჯობესებს კოდის ხარისხს
  4. ზრდის პროგრამის წარმადობას

To view or add a comment, sign in

Explore topics