Linq operatörleri ve kullanımı örnek PDF Yazdır e-Posta
Administrator tarafından yazıldı   
Pazartesi, 06 Eylül 2010 22:55

konu itibariyle öğrenmek amaçlı hazırlamış olduğum kaynak kodu paylaşıyorum

form üzerine 11 adet buton ve bir adet listbox koyarak sizde denemenizi yapabilirsiniz 

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Windows.Forms;

 

namespace linq_olan

{

    public partial class Form1 : Form

    {

        public Form1()

        {

            InitializeComponent();

        }

        class ogrenciler

        {

            publicint ogrenciid { get;set; }

            publicstring ogrenciadsoyad { get; set; }

            publicint ogrenciyas { get;set; }

            publicbool aktif { get;set; }

 

        }

        class sinif

        {

            publicstring sinifadi { get;set; }

            publicint ogrenciid { get;set; }

 

 

        }

        class okul

        {

            publicstring okuladi { get;set; }

            publicstring sinifadi { get;set; }

 

 

        }

        List<okul> okulum = newList<okul>() {

        new okul (){okuladi="al",sinifadi="1"},

        new okul(){okuladi="sml",sinifadi="2"},

        new okul(){okuladi="mel",sinifadi="3"}

        };

        List<sinif> sinifim = newList<sinif>() {

        new sinif(){ ogrenciid=1,sinifadi="1"},

        new sinif(){ ogrenciid=2,sinifadi="2"},

        new sinif(){ogrenciid =3,sinifadi="1"},

        new sinif(){ogrenciid=4,sinifadi="2"},

        new sinif(){ogrenciid=5,sinifadi="3"}

        };

 

        List<ogrenciler> liste = newList<ogrenciler>()

        {

            newogrenciler(){

           ogrenciid=1,ogrenciyas=12,ogrenciadsoyad="sade dede",aktif=true

            },

            new ogrenciler(){

               ogrenciid=2,ogrenciyas=13,ogrenciadsoyad="demir demirkan",aktif=true

            },

            newogrenciler(){

               ogrenciid=3,ogrenciyas=14,ogrenciadsoyad="kemal sers",aktif=false

            },

           new ogrenciler(){

               ogrenciid=4,ogrenciyas=12,ogrenciadsoyad="fevzi çalış",aktif=true

            },

            newogrenciler(){

           

           ogrenciid=5,ogrenciyas=13,ogrenciadsoyad="AHMET yusuf",aktif=true

            },

            newogrenciler(){ogrenciadsoyad="murat onur",ogrenciyas=12,aktif=true}

        };

        privatevoid Form1_Load(object sender, EventArgs e)

        {

          

        }

 

        privatevoid button1_Click(object sender, EventArgs e)

        {

            //////Lambda Expression (=>) kullanımı aktif olan oğrenci ve idsi bir olan gösterelim

            ////liste.Where(p=>p.Aktif…..) ifadesinde artık p dediğimiz eleman liste isimli listemizde

            ////yer alan her bir elemanı (Ogrenciler  sınıfı türünden elemanlar) temsil etmektedir.

            ////Dolayısıyla p. İfadesi ile Ogrenciler sınıfına ait özellikleri görebilmekteyiz.

            ////    Sorgudan dönen elemanları da ogrenciler isimli bir listeye aktarıyoruz. Linq sorguları

            ////IEnumerable<T> türünden bir liste döndürdüğü için elemanlarımızı okumak için foreach döngüsü

            ////    ile yazabiliriz.

            IEnumerable<ogrenciler> ogrenci = liste.Where(p => p.aktif && p.ogrenciid == 1);

            foreach (ogrenciler item in ogrenci)

            {

                listBox1.Items.Add(item.ogrenciid + " " + item.ogrenciadsoyad + " " + item.ogrenciyas);

 

            }

        }

 

        privatevoid button2_Click(object sender, EventArgs e)

        {

            //klasik sorgu teknikleriyle yapacak olursak

            var ogrenci = from k in liste

                          where k.aktif && k.ogrenciid == 4

                          select k;

 

            foreach (ogrenciler item in ogrenci)

            {

               listBox1.Items.Add(item.ogrenciid + " " + item.ogrenciadsoyad + " " + item.ogrenciyas);

 

            }

        }

 

        privatevoid button3_Click(object sender, EventArgs e)

        {

            //sıralamak için

            int[] dizi = { 21, 43, 43, 67, 665, 34, 33, 5678, 6, 34, 86, 34 };

            var bolum = (from sayi in dizi

                         orderby sayi

                         select sayi);

            foreach (var deger in bolum)

            {

                listBox1.Items.Add(deger);

            }

        }

 

        privatevoid button4_Click(object sender, EventArgs e)

        {

            string[] sehirler = { "samsun", "amasya", "ankara","yozgat", "sinop","diyarbakır", "istanbul" };

            string[] sehirler2 = { "kayseri", "malatya", "izmir","erzurum", "antalya" };

 

            //birleştirmek için

            var sonuc = sehirler2.Concat(sehirler);

            sonuc = (from sayi in sonuc

                     select sayi);

 

            //var ara = from sehir in sehirler

 

            //          join sehir2 in sehirler2 on sehir[0] equals sehir2[0]

 

            //          select sehir + " " + sehir2;

 

 

 

 

            foreach (var item in sonuc)

            {

                listBox1.Items.Add(item);

            }

        }

 

        privatevoid button5_Click(object sender, EventArgs e)

        {

            listBox1.Items.Clear();

        }

 

        privatevoid button6_Click(object sender, EventArgs e)

        {

            var goster = from k in liste

                         where k.ogrenciadsoyad[0] == 'A'

                         select k;

            //select k.ogrenciadsoyad; //foreach da item.ogrenciadsoyad yazmamak için

            foreach (var item in goster)

            {

               listBox1.Items.Add(item.ogrenciadsoyad);

            }

        }

 

        privatevoid button7_Click(object sender, EventArgs e)

        {

//             SelectMany Select ile seçim yapmaya çalıştığımız koleksiyon içerisinde yer alan

//            alanlardan biri gene koleksiyon yapısında ise bu içteki koleksiyonun elemanlarına

//            ulaşmak için iç içe iki foreach  döngüsü kullanmamız gerekir. (Bizim liste isimli

//            koleksiyonumuz göz önüne alınırsa bu koleksiyonumuzun alanlarından ogrenciadsoyad alanı gene

//            birden fazla elemana sahip bir string dizisi olarak düşünülebilir.)

 

            //Örneğin liste isimli koleksiyonumuzdan ogrenciyas’si 12 olan kişimizin ad ve soyadını görüntülemek

//            istersek aşağıdaki sorguyu kullanmamız gerekir.

            var goster = (from k in liste

                         where k.ogrenciyas == 12

                         select k.ogrenciadsoyad.Split(','));

            /////Lambda Expression (=>) kullanımı

            var sonuc=liste.Where(k=>k.ogrenciyas==13).Select(p=>p.ogrenciadsoyad.Split(','));

 

            foreach (var ogreniadsoyad in sonuc)

            {

                foreach (var item in ogreniadsoyad)

                {

                    listBox1.Items.Add(item);

                }

            }

        }

 

        privatevoid button8_Click(object sender, EventArgs e)

        {

//  Yukarıdaki sorgudan dönen koleksiyonun türü Select kullandığımızdan dolayı

//IEnumerable<IEnumerable<string>> türündendir. İç içe 2 adet IEnumerable tür

//     olduğundan dolayı en içteki elemanlara ulaşmak için iç içe 2 döngü

            //    kullanmamız gerekmektedir. Dıştaki döngü ogreniadsoyadın tümünü dizi

//     şeklinde elde ederken içteki döngü bu elemanları tek tek ekrana yazmaktadır.

 

//Yukarıda içi içe 2 foreach döngüsü kurarak yaptığımız işi SelectMany metodu tek başına

// yapabilmektedir. Bu metod geriye IEnumerable<string> türünden bir sonuç getirdiği için

//   tek bir döngü ile tüm elemanlar elde edilebilmektedir. Yani iç koleksiyonu da otomatik

//  olarak parçalayabilmektedir.

            var sonuc=liste.Where(p=>p.ogrenciyas==12).SelectMany(k=>k.ogrenciadsoyad.Split(','));

            foreach (var item in sonuc)

            {

                listBox1.Items.Add(item);

            }

        }

 

        privatevoid button9_Click(object sender, EventArgs e)

        {

  

 

//Join operatörü, Sql sorgularımızda kullandığımız join operatörüne çok benzemektedir.

//    Amaç iki ayrı koleksiyonu ID yapısındaki ortak kolonları ile bağlamaktır.

//Örneğin yukarıda tanımlamış olduğumuz koleksiyonlarımızdan sınıf ve öğrenciler

//isimli koleksiyonlarımızı ele aldığımızda “öğrenciler” isimli koleksiyonumuzda

   //ogrenciid tanımlayan bilgileri, “sınıf” isimli koleksiyon ise öğrencilerin

//  dahil olabilecekleri birimleri tanımlamaktadır. Biz her bir öğrencinin adı ve

//  sınıfının adını elde edebilmek için 2 adet sorgu çalıştırmalıyız. Çünkü

//     sınıf koleksiyonunda öğrencilerinin adı yer almaktadır

            //    . Her iki koleksiyonda da yer alan ve ogrenciid kolonu üzerinden ikisini birbirin

//bağlayan bir sorgu yazarsak istediğimiz sonucu elde edebiliriz.

//Aşağıdaki sorguda şunu demek istiyoruz. “Bana sınıf koleksiyonunu be ogrenciler

//  koleksiyonunu getir ama sınıf koleksiyonunda yer alan ögrenciid kolonunun

            // değeri birimler koleksiyonun ögrenciid kolonunun değerine eşit olanları seçerek getir.”

//  Gelen sonuç ta bir nesne koleksiyonuna atanmıştır. (select new ile Linq to Object yapılmıştır)

            var birlestir = from k in liste

                            from p in sinifim

                            where k.ogrenciid == p.ogrenciid

                            select new {

                            ogrenciadvesoyadi =k.ogrenciadsoyad,

                           sinifinadi=p.sinifadi

                           

                            };

            foreach (var item in birlestir)

            {

                listBox1.Items.Add("Sınıf adı=" + item.sinifinadi + " Oğrenci ad ve soyadı=" + item.ogrenciadvesoyadi);

            }

//Aynı sorguyu join operatörü kullanarak çok daha pratik bir şekilde gerçekleştirebiliriz

//Join operatörü aynen SQL’deki iner join gibi çalışır. Her iki kayıt yığınındaki eşleşen

// kayıtları ele alarak ogrenciler koleksiyonundan ogrenciid’ye karşılık gelen sinif’ini döndürür.

            var birlestir2=from k in liste

                           join p in sinifim on k.ogrenciid equals p.ogrenciid

                           select new

                           {

                              ogrenciadvesoyadi = k.ogrenciadsoyad,

                               sinifinadi = p.sinifadi

 

                           };

 

            foreach (var item in birlestir2)

            {

                listBox1.Items.Add("Sınıf adı="+item.sinifinadi + " Oğrenci ad ve soyadı=" + item.ogrenciadvesoyadi);

            }

 //Ekran çıktısında 3adet öğrenci listelenmiş  murat onur isimli ğrenci listelenmemiştir.

 // Çünkü bu öğrencinin  ogrenciidsi silinmiştir.  Join operatörü de Sql’deki iner join gibi çalıştığından oğrenciler

 // tablosundaki kayıtlardan yalnızca sınıf ile eşleşenleri getirecektir.

        }

 

        privatevoid button10_Click(object sender, EventArgs e)

        {

            ////GroupJoin kullanımı

            var sonuc = from k in liste

                        join p in sinifim on k.ogrenciid equals p.ogrenciid into t

                        from s in t.DefaultIfEmpty()

                        select new {

                            ogrenciadvesoyadi = k.ogrenciadsoyad,

                            ogrenciid = (s==null) ? 0 : s.ogrenciid

                            //Yukarıdaki ifade ile eğer ogrencinin dahil olduğu

                            //ogrenci idi boş geliyorsa o, aksi halde ogrenciidsini yazıyoruz

                        };

            foreach (var item in sonuc)

            {

                listBox1.Items.Add("oğrenci id=" + item.ogrenciid + " Oğrenci ad ve soyadı=" + item.ogrenciadvesoyadi);

            }

 

        }

 

        privatevoid button11_Click(object sender, EventArgs e)

        {

 

//            GroupBy

 

//Bu operatör Ienumerable türünden bir veri kümesi üzerinde belli bir kritere göre kayıtları

// gruplamaya yarar. Yapısı ve çalışma mantığı itibariyle Sql sorgularındaki GroupBy kullanımı

//  ile büyük benzerlikler göstermektedir. IEnumerable<IGrouping<K,T>> türünden bir veri kümesi döndürür.

//IGrouping<K,T> arayüzü IEnumerable<T> türünden miras almaktadır.

 

//public interface IGrouping<K, T> : IEnumerable<T>

//{

//       K Key { get; }

//}

 

//Bu arayüz Key isminde readonly bir özellik içermektedir.

//    Bu özellik yardımıyla gruplama sonucu elde edeceğimiz elemanlara ulaşabiliriz

 

 

 

            var sayilarim = new int[] { 2,65,89,59,5,9,654,7,5,66,52};

            var goster = from k in sayilarim

                         group k by k % 6 into k2

                         select new {

                         kalan =k2.Key,

                         adet=k2.Count()

                         };

            foreach (var item in goster)

            {

                listBox1.Items.Add( "6 ile bolündüğünde"  + item.kalan+" veren "+item.adet+" mevcut");

            }

        }

 

        privatevoid button12_Click(object sender, EventArgs e)

        {

            var goster = from k in okulum

                         join p in sinifim on k.sinifadi equals p.sinifadi

                         group p by p.sinifadiinto k

                         select new

                         {

                             sinifadi=k.Key,

                             adet=k.Count()

                         };

   //        okulum isimli koleksiyonumuz üzerinde sinifadi isimlerini de bu koleksiyona bağladık.

   //(join) Daha sonra sinifadina   göre verilerimizi gruplayarak her gruba düşen öğrenci sayısını belirlemiş oluyoruz.

            foreach (var item in goster)

            {

               listBox1.Items.Add(item.sinifadi + " nolu sınıfta" + "  " + item.adet + "  kişi mevcut");

            }

        }

    }

}

 

 

 

 

 

 

 

 

Yorumlar (0)Add Comment

Yorum yaz
daha küçük | daha büyük

busy