Sobes.tech
Middle

Entity Framework-də join operatorundan necə istifadə etmək olar?

sobes.tech Süni İntellekt

AI-dan cavab

Entity Framework (EF)-də JOIN operatoru LINQ metodlarının Join və ya SelectMany kombinasiyası və həmçinin naviqasiya xüsusiyyətlərinin istifadəsi ilə həyata keçirilir.

  1. Naviqasiya xüsusiyyətlərinin istifadəsi: Ən çox yayılmış və tövsiyə olunan üsul, əgər entitələr arasında əlaqələr qurulubsa. EF avtomatik olaraq JOIN ilə SQL sorğuları yaradır.

    // Nümunə: Müştəri məlumatları ilə birlikdə bütün sifarişləri əldə etmək
    var ordersWithCustomers = context.Orders
        .Where(o => o.Customer != null) // Müştərinin mövcudluğunu yoxlama
        .Select(o => new
        {
            OrderId = o.Id,
            OrderDate = o.OrderDate,
            CustomerName = o.Customer.Name
        })
        .ToList();
    
  2. LINQ Join: İki kolleksiyanı açıq şəkildə uyğun sahələr üzrə birləşdirmək üçün istifadə olunur, SQL INNER JOIN-ə bənzər.

    // Nümunə: Orders və Customers-in birləşdirilməsi
    var ordersAndCustomers = context.Orders
        .Join(context.Customers, // İkinci kolleksiya
              order => order.CustomerId, // Birinci kolleksiyadan açar
              customer => customer.Id, // İkinci kolleksiyadan açar
              (order, customer) => new // Birlikdə nəticə
              {
                  OrderId = order.Id,
                  OrderDate = order.OrderDate,
                  CustomerName = customer.Name
              })
        .ToList();
    
  3. LINQ GroupJoin: SQL LEFT JOIN-ə bənzəyir, ikinci kolleksiyanın elementlərini ilk element üçün qruplaşdırır.

    // Nümunə: Bütün müştəriləri və onların sifarişlərini əldə etmək
    var customersWithOrders = context.Customers
        .GroupJoin(context.Orders, // Birlik üçün kolleksiya
                   customer => customer.Id, // Müştərinin açarı
                   order => order.CustomerId, // Sifarişin açarı
                   (customer, orders) => new // Qruplaşdırma nəticəsi
                   {
                       CustomerName = customer.Name,
                       Orders = orders.Select(o => new { o.Id, o.OrderDate }).ToList()
                   })
        .ToList();
    
  4. LINQ SelectMany: CROSS JOIN-u təqlid etmək və ya iki kolleksiyadan elementlərin kombinasiyalarını yaratmaq üçün istifadə olunur. Where ilə birlikdə INNER JOIN kimi işləyə bilər.

    // Nümunə: Müştəri-sifariş cütlüklərini əldə etmək
    var crossJoinExample = context.Customers
        .SelectMany(customer => context.Orders, // Hər müştəri üçün bütün sifarişlər
                    (customer, order) => new // Nəticə
                    {
                        CustomerName = customer.Name,
                        OrderId = order.Id
                    })
        .ToList();
    
    // Nümunə: `SelectMany` və `Where` ilə Inner Join-in təqlidi
    var innerJoinWithSelectMany = context.Customers
        .SelectMany(customer => context.Orders, // Hər müştəri üçün hər sifariş
                    (customer, order) => new // Məlumatların ara nəticəsi
                    {
                        Customer = customer,
                        Order = order
                    })
        .Where(pair => pair.Customer.Id == pair.Order.CustomerId) // Açarların uyğunluğuna görə filtr
        .Select(pair => new // Nəticə
                {
                    CustomerName = pair.Customer.Name,
                    OrderId = pair.Order.Id
                })
        .ToList();
    

Metod seçimi konkret tapşırıq və məlumatların quruluşundan asılıdır. Naviqasiya xüsusiyyətləri EF modelində artıq müəyyən edilmiş əlaqələrlə işləmək üçün üstünlük verilən yanaşmadır. Aydın JoinGroupJoin mürəkkəb kolleksiya birləşdirmə ssenariləri üçün daha çox elastiklik təmin edir. SelectMany isə daha qeyri-standart hallarda faydalıdır.