LINQ-2

18
Oct

Sınıfları kullanarak bir koleksiyon olusturma ve be koleksiyon içinde LINQ sorgusu yapmak. Örnekte incelediğiniz gibi dgr nesnesi degerler class ından türeyen bir koleksiyondur.

 

   public partial class Form1 : Form

    {

        public Form1()

        {

            InitializeComponent();

        }

        int i = 0;

        degerler[] dgr = new degerler[5];

        private void button1_Click(object sender, EventArgs e)

        {

            dgr[i] = new degerler();

            dgr[i].Ad = textBox1.Text;

            dgr[i].Yas = Convert.ToInt32(textBox2.Text);

            i++;

            if (i > 4)

            {

                MessageBox.Show("Liste Doldu");

            }

        }

 

        private void btnSonuc_Click(object sender, EventArgs e)

        {

            var sorgu = from sonuc in dgr where sonuc.Yas > 10 select sonuc;

 

            foreach (var eleman in sorgu)

            {

                MessageBox.Show(eleman.Ad);

            }

        }

 

        class degerler

        {

            public string Ad;

            public int Yas;

        }

    }

Etiketler : LINQ koleksiyon
Kategoriler : Kendi Makalelerim LINQ
Yorumlar : 0 Yorum Yorum Yaz
LINQ nedir diyerek başlıyalım:
LINQ .NetFramework ile gelen bir yeniliktir. Hanginiz veri tabanı programı yaptınız desem burda ben şu kadar yıllık programcıyım hiç de veritabanı programı yapmadım diyen cıkmaz sanırım. SQL veri tabanı işlemlerinde harikalar oluşturan bir dildir.(Her ne kadar bazen şaşırsada :)). Peki böyle birseyi program içindeki bi dizi de, bir listede, bir XML yapısında kullanmak güzel olmazmıydı. İşte burda LINQ devreye giriyor. kısaca LINQ i özetliyecek olursak Program içinde sorgulama yapmamıza yarayan yapı diyebiliriz.

şimdi basit bir örnek le devam edelim.

      private void button1_Click(object sender, EventArgs e)

        {

            int[] sayilar = { 1, 2, 3, 5, 8, 13, 21, 34 };

 

            var sorgu = from s in sayilar where s > 5 select s;

 

            foreach (int sayi in sorgu)

            {

                MessageBox.Show(sayi.ToString());

            }

        }

burda dönecek değer 8,13,21,34 dür.

sorgumuzu inceleyecek olur SQL e cok benzemekte sadece Select s basta değil sonra :D bir fromdan sonra foreach deki sorgu gibi bir sorgu var.

 

SQL içerisinde kullandığımız komutları (orderby -ascending,-descending,min,max,sum,count) aynı LINQ de de kullanabiliriz.

 

 

       private void button2_Click(object sender, EventArgs e)

        {

            int[] sayilar = { 1, 2, 3, 5, 8, 13, 21, 34 };

 

            var sorgu = from s in sayilar where s > 5 orderby s descending select s;

 

            foreach (int sayi in sorgu)

            {

                MessageBox.Show(sayi.ToString());

            }

        }

bu rada büyükten küçüğe göre sıralama olur.

        private void button3_Click(object sender, EventArgs e)

        {

            string[] diller = { "C#", "C++", "C", "Python", "VB", "VB.NET", "C#", "VB.NET" };

            var sorgu = from dil in diller.Distinct() orderby dil ascending select dil;

 

            foreach (string dill in sorgu)

            {

                MessageBox.Show(dill.ToString());

            }

        }

Bu kod ile distinct ile aynı olan veriler çıkartılır ve ascending ile küçükten büyüğe doğtu sırlama yapılır.

Görüldüğü gibi kullanım noktasında sql den pek farkı yok.

Etiketler : C# LINQ Örnek Giriş
Kategoriler : Kendi Makalelerim LINQ
Yorumlar : 0 Yorum Yorum Yaz

Yazdığımız kodlarda şu ana kadar bir hata ile karşılaştığımızda hep programımızın ırılmasına şahit olduk. Fakat bu olay sizlerinde bildiğiniz gibi sağlıklı bir durum değil. örneğin ilerde göreceğimiz Veritabanı işlemlerinde bağlantı açık ien oluşan bir hata bağlantının kapanmamasına sebep olabiliyor. Veya kullanıcı tarafından yapılan bir hata programa mal edilebiliyor.
Hata Yakala ile programda bir hata veya istisnai bir durum oluştuğunda program kırılmadan messagebox ile hata verdirtebiliriz. Hata Yakalamanın 3 aşaması vardı try-catch-finally.

Try bloğu: Programımız düzgün çalıştığı an işleyen kodların bulunduğu kısım. Yani bu kısımda programımız normal çalıştığında ne yapmasını istiyorsak onları yazıyoruz.

Catch bloğu: Programımız bir hata ile karşılaştığında try bloğundaki kodların çalışmasını durdurarak catch bloğuna geçer ve buradaki kodlar çalışır.

Finally bloğu: Bu kısımda ise programımız düzgün çalışsada hata oluşsada çalışmasını istediğimiz odlardır. örneğin Veritabanı bağlantılarının kapatılması, Dosya Streamlerinin kapatılması bu kısıma yazılırsa programımız etkin bir şekilde çalışacaktır.

   19 private void button1_Click(object sender, EventArgs e)

   20         {

   21             try

   22             {

   23                 MessageBox.Show((Convert.ToInt32(textBox1.Text) + Convert.ToInt32(textBox2.Text)).ToString());

   24             }

   25             catch (Exception hata)

   26             {

   27                 MessageBox.Show(hata.ToString());

   28             }

   29             finally

   30             {

   31                 this.Close();

   32             }

   33         }

 

Yukarıdaki kodumuz basit bir toplama işlemi kodu. Gördüğünüz gibi try kısmında toplama işlemi var. catch kısmındaki kodumuz ise bir hata olduğunda bunu bize messagebox ile bildirir.Finally kısmındai kodumuz ise her iki durumda çalışacak olan formu kapatan this.Close(); kodudur.

şimdi textboxlara 13 ve 14 girildiğinde Messagebox ile 27 çıkar tamam dediğinizde form kapanır.
fakat 12 ve tahsin yazdığınızda (tahsin ifadesi sayıya dönüştürülemediği için) catch bloğuna düşer size ilgili hatayı verir ve sonra finally kodu çalışır ve form ekranımız kapanır.

Bu işe yeni başlayığda ilk buyuk projesini yapan arkadaşlar genellikle form boyutunu büyüttüklerinde kullandığı kontrollerin büyümemesinden şikayet eder. Bu sorunu aşmanın iki yolu vardır:

*Dock: Programımız da kullandığımız paneller ve toolların Dock özelliğini aktif ederek (formun neresinde üst,alt,sağ,sol,orta) istediğimiz kısımda genişletip daralta biliriz. Fakat bu özellik her tool için geçerli olmadığından ve bazen işimizi tam göremediğinden benim pek tavsiye ettiğim yöntem değildir. Sadece kolaylık açısından kullanılabilir veya formun temel görünümünü düzenlemek için kullanabiliriz.

*Anchor: Her kontrolde bulunan Anchor özelliği ile form boyutu değiştiğinde kontrolümüzün boyutunun hangi yönlere doğru değişeceğinide karar veririz. Formun ince ayarlamalarında bu özelliği kullanarak bu sorunu aşabilirsiniz

Project->Add Reference->Com tabanı->’Windows Script Host Object Model’ ekle
...
using System.IO;

using IWshRuntimeLibrary;

...
bu kısmı ise Form_Load a yazın

if (!System.IO.File.Exists(Environment.GetFolderPath(Environment.SpecialFolder.Startup) +

"\\BizimCafe.lnk"))
                {
                    IWshRuntimeLibrary.WshShell winShell = new IWshRuntimeLibrary.WshShellClass();
                    IWshRuntimeLibrary.IWshShortcut shortcut =

(IWshRuntimeLibrary.IWshShortcut)winShell.CreateShortcut(Environment.GetFolderPath(Environment.Special

Folder.Startup) + "\\BizimCafe.lnk");
                    shortcut.TargetPath = Application.ExecutablePath;
                    shortcut.Save();
                }

 

Kodun çalışma mantığı şu şekildedir Startup klasörüne programın kısayolunu ekliyor.
İlk başta kısayol varmı onu kontrol ediyor sayet kısayol yoksa kendisi ekliyor.

2. yol registry dir.
Registry nin run anahtarına programı ekleyerek yapabilirsiniz
RegistryKey regKey = Registry.CurrentUser.OpenSubKey(@"Software\Microsoft\Windows\CurrentVersion\Run\", true);
            
            regKey.SetValue("anysoftare", "C:\\Program Files\\Winamp\\winamp.exe");

            regKey.Close();

12345