• Loyihalash Proyeksiya joriy tanlov turidan boshqa turini loyihalashga imkon beradi. Select
  • Mavzu: linq texnologiyasi va operatorlari




    Download 22,68 Kb.
    bet4/5
    Sana08.09.2024
    Hajmi22,68 Kb.
    #270591
    1   2   3   4   5
    Bog'liq
    15-maruza. LINQ texnologiyalari va operatorlari.

    Murakkab filtrlar
    Endi yanada murakkab filtrlarni ko'rib chiqamiz. Masalan, foydalanuvchi sinfida foydalanuvchi gapiradigan tillar ro'yxati mavjud. Agar biz foydalanuvchilarni tillar bo'yicha filtrlashimiz kerak bo'lsa:

    1
    2
    3
    4
    5

    var selectedUsers = from user inusers
    from lang inuser.Languages
    where user.Age< 28
    where lang == "английский"
    select user;

    Natija:
    Tom-23
    Bob-27
    SelectMany metodi kengaytma metodlaridan foydalangan holda o'xshash so'rov yaratish uchun ishlatiladi:

    1
    2
    3
    4

    var selectedUsers = users.SelectMany(u => u.Languages,
    (u, l) => new{ User = u, Lang = l })
    .Where(u => u.Lang == "английский"&& u.User.Age < 28)
    .Select(u=>u.User);

    SelectMany ()metodi birinchi parametr sifatida proektsiyalanadigan ketma-ketlikni va ikkinchi parametr sifatida har bir elementga qo'llaniladigan transformatsiya funktsiyasini oladi. U foydalanuvchi tilidagi 8 juftlikni qaytaradi (yangi {User = u, Lang = l}), so'ngra qayerda filtrlanadi.
    Loyihalash
    Proyeksiya joriy tanlov turidan boshqa turini loyihalashga imkon beradi. Select operatori proyeksiya uchun ishlatiladi. Aytaylik, bizda foydalanuvchini ifodalovchi quyidagi sinf obyektlari to'plami mavjud:

    1
    2
    3
    4
    5

    classUser
    {
    publicstringName { get;set; }
    publicintAge { get; set; }
    }

    Lekin bizga butun ob'ekt kerak emas, faqat uning Name xususiyati kerak:

    1
    2
    3
    4
    5
    6
    7
    8

    List users = newList();
    users.Add(newUser { Name = "Sam", Age = 43 });
    users.Add(newUser { Name = "Tom", Age = 33 });
    var names = from u inusers select u.Name;
    foreach(stringn innames)
    Console.WriteLine(n);

    LINQ ifodasining natijasi qatorlar qatorini ifodalaydi, chunki u.Name ni tanlash ifodasi natija to'plamida faqat Name xususiyat qiymatlarini tanlaydi.
    Xuddi shunday, siz boshqa turdagi, shu jumladan anonim ob'ektlarni yaratishingiz mumkin:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13

    List users = newList();
    users.Add(newUser { Name = "Sam", Age = 43 });
    users.Add(newUser { Name = "Tom", Age = 33 });
    var items = from u inusers
    select new
    {
    FirstName = u.Name,
    DateOfBirth = DateTime.Now.Year - u.Age
    };
    foreach(var n initems)
    Console.WriteLine($"{n.FirstName} - {n.DateOfBirth}");

    Bu yerda select operatori joriy User obyekti yordamida noma'lum turdagi obyektni yaratadi. Va endi natija ushbu noma'lum turdagi ob'ektlar to'plamini o'z ichiga oladi, unda ikkita xususiyat aniqlanadi: FirstName va DateOfBirth.
    Shu bilan bir qatorda biz Select() kengaytmasi metodidan foydalanishimiz mumkin:

    1
    2
    3
    4
    5
    6
    7
    8
    9

    var names = users.Select(u => u.Name);
    var items = users.Select(u => new
    {
    FirstName = u.Name,
    DateOfBirth = DateTime.Now.Year - u.Age
    });


    Download 22,68 Kb.
    1   2   3   4   5




    Download 22,68 Kb.

    Bosh sahifa
    Aloqalar

        Bosh sahifa



    Mavzu: linq texnologiyasi va operatorlari

    Download 22,68 Kb.