Pages

Linq Ertelenmiş yürütme (differed execution) ve Anında yürütme (immediate Execution )

Linq ifadeleri çalışma anı önemlidir.Linq ifadeleri çağrıldığı anda çalışırlar

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Linq_Ertelenmisveanındayurutme
{
    class Program
    {
        static void Main(string[] args)
        {

             String[] isimler = new string[4] { "İbrahim", "Ali", "Veli", "Mahmutt" };
            int x = 5;
            var sorgu = from  kisi in isimler
                        where kisi.Length==x
                        orderby kisi
                        select kisi.ToUpper();

            x=7;
            foreach (string ad in sorgu)
            {
                Console.WriteLine(ad);

            }
            Console.Read();

        }
    }
}

image
Dikkat edecek olursak sonuçlar 7 harflidir. Çünkü x = 5 ken linq sorgusu çalışmamıştır.
foreach içinde çağrılduğı anda linq sorgusu çalışmıştır. ve bu çağrılmadan hemen önce x=7 olmuştur. Buna ertelenmiş çalıştırma deniyor.Bu yöntemin amacı Linq ifadelerinin bir kere yazılması ve farklı zamanlarda çağrıldığında güncel sonuçları döndürmesidir.

peki ya bu işlemin tersini yapmak istersek. Hemen çalışmasını istersek ne yapmamız gerekir.

Sorgunun o anda çalışması ve sonucun korunması için .net framework bize  ToArray<T>(),
ToDictionary<TSource,TKey>(), ToList<T>()
gibi genişletme yordamları sunmaktadır.
hemen bir örnek ile anında çalıştırmayı görelim

int x = 3;

           //var sorgu = from  kisi in isimler
           //            where kisi.Length==x
           //            orderby kisi
           //            select kisi.ToUpper();

              var  sorgu = (from kisi in isimler
                       where kisi.Length == x
                       orderby kisi
                       select kisi.ToUpper()).ToArray<string>();

           x=7;
           foreach (string ad in sorgu)

şeklinde değiştirelim. Ekranda Ali yazacaktır.Görüldüğü gibi burda işlem hemen yapılmış ve 3 harfli isim yazdırılmış sonra x değişkeninin değeri 7 yapılmıştır.

image

Linq Sorgu Ve Söz Dizimi Kullanılması

 

Önce konsol uygulaması açıyoruz. ve aşağıdaki kodları yazmaya başlıyoruz.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace LinqSozDizimi
{
    class Program
    {
        static void Main(string[] args)
        {
            String[] isimler = new string[4] { "İbrahim", "Ali", "Veli", "Mahmutt" };
            var sorgu = from  kisi in isimler
                        where kisi.Length==7
                        orderby kisi
                        select kisi.ToUpper();

            foreach (string ad in sorgu)
            {
                Console.WriteLine(ad);

            }
            Console.Read();
        }
    }
}

yukarıdaki kodumuzda önce dizimizi oluşturduk sonra var sorgu = kodu ile  Anonim bir türde değişkenimizi oluşturduk(anonim tiplerde derleyici çalışma anında içindeki veriye göre değişkenin tipini belirler)

var sorgu = from  kisi in isimler
                        where kisi.Length==7
                        orderby kisi
                        select kisi.ToUpper();

bu kısımda ise verimizi çektik.Bu tarz Anonim tipler kullanılmış  ifadeleri genellikle sorgudaki select operatörünün geri döndüreceği değerler her seferinde değişebiliyor ise kullanılır.(Çünkü ozaman sorgunun döndüreceği sonucu karşılayacak tür bulunmamaktadır.) 
Burada klasik sql sorgularına benzer bir yapı olduğu dikkatinizi çekmiştir.
Eğer sonucun string tipinde döneceğini biliyor isek şu şekilde de yazabilirdik

IEnumerable<string >sorgu = from  kisi in isimler
                        where kisi.Length==7
                        orderby kisi
                        select kisi.ToUpper();

Dikkat: sorgualanacak yapı IEnumerable<T> arabirimini desteklemesi gerekir.
burada eğer linq olmasaydı foreach döngüsü içinde if ile tüm kayıtların kriterimize uyup uymadığına bakacaktık.

imageekran Çıktısı ikisindede bu şekilde olur.

Aşağıdaki gibi bir örneğe bakalım şimdi. Burda 2 öğesi olan isimsiz bir tür döndürüyoruz geriye.

var sorgu = from kisi in isimler
                       where kisi.Length == 7
                       orderby kisi
                       select new { boyut = kisi.Length, deger = kisi };

           foreach (var  ad in sorgu)
           {
               Console.WriteLine(ad);
          }

dikkat etmemiz gereken kısımlar sorgunun anonim tipte olması ve select ifadesinin geriye tipleri farklı 2 değer döndürmesi ve foreach kısmında yine anonim tip oluşturmamızdır.

image
başka bir kullanımını görelim şimdi Meselabir class oluşturup dönen değerlerimizi bu sınıf öğelerine atayalım

public class benimclassim
   {
       public int boyut;
       public string deger;

   }

sınıfımızı oluşturduk şimdi ifademizde şu değişiklikleri yapalım.

var sorgu = from kisi in isimler
                        where kisi.Length == 7
                        orderby kisi
                        select new benimclassim
                        {
                           boyut=kisi.Length,
                           deger= kisi
                        };

Linq Nedir.

Linq “Dil ile bütünleşik sorgulama” anlamına gelmektedir.Linq .net framework 3.5 ile ortaya çıkmıştır.Linq sql benzeri sorgulama yapılmasını sağlar fakat bu sorgulama da tamamen nesnel ifadeler kullanılır. Yani nesneer ile veritabanları arasında köprü görevi üstlenir.Sql kodu yerine programımızda nesneler kullanarak veriye erişimi sağlar.
Linq ya ait sınıf ve arabirimler System.Linq sınıfı altında bulunur.
linq Veritabanları ,Ado.net ,xml belgeleri ve bellekte bulunan veriler için özel sağlayıcılar sunar bize bunlar Linq to Object ,Linq to SQL (DLinq),Linq to Xml(XLinq) ,Linq to Dataset tir.

Linq To object : Bu sağlayıcı koleksiyonları sorgulamaya yarar.Fakat Sadece IEnumeralbel<T> arabirimini destekleyen koleksiyonlar sorgulanır.System.Linq.Enumerable a ait fonksiyonlar kullanılır.
Linq to Xml: Adından anlaşılacağı gibi xml belgelerini sorgulamak için kullanılır. System.Xml.Linq kütüphanesini kullanır.
Linq to SQL(DLinq) : İlişkisel veritabanlarını sorgular.Linq ile veritabanı standart sorgulama dili olan Sql arasından ki iletişim Veritabanı işaretleme dili (Database Markup Language –DBML) sağlar.
Linq To Dataset : Ado.net in Dataset neenelerinin ilişkisel veritabanı gibi sorgulanmasını sağlar.

linq
-Msnd Magazinden alınmış Linq Mimarisi-

LİNQ mimarisi aşağıdaki yazım biçimlerini destekler.

  • Sorgulama Yazım Biçimi
  • Genişletilmiş yordamlar(Extension method ) ve Lambda ifadeleri
  • Enumerable (sayılabilir ) türler
  • Generic delegeler
  • Anonim yordamlar

Lambda ifadeleri ve Extension methods en çokk kullanılanlarıdır.

C de tek while ile sayıyı tersten yazdırma

int b = 0;
int a = 853;
while((a/10)>=1)
{
b= (b*10)+(a%10);
a=a/10;
}

nedirtv?com - Mayıs Ayı Webinerleri

Konu: SQL Server Integration Services(SSIS)
Konuşmacı: Burak BATUR
Zaman: 12 Mayıs 2009 Salı 21:00-22:00
Adres: https://www.livemeeting.com/cc/mvp/join?id=G7WZ27&role=attend
Konu: ASP.NET MVC - URL Routing
Konuşmacı: Uğur UMUTLUOĞLU
Zaman: 18 Mayıs 2009 Pazartesi 21:00-22:00
Adres: https://www.livemeeting.com/cc/mvp/join?id=NSWTM3&role=attend
Konu: WCF 4.0 ve WF 4.0WCF 4.0 ve WF 4.0
Konuşmacı: Burak Selim ŞENYURT
Zaman: 19 Mayıs 2009 Salı 21:00-22:00
Adres: https://www.livemeeting.com/cc/mvp/join?id=N5PFDH&role=attend
Konu: WCF ve TCP Hosting
Konuşmacı: Onur ŞİMŞEK
Zaman: 20 Mayıs 2009 Çarşamba 21:00-22:00
Adres: https://www.livemeeting.com/cc/mvp/join?id=WG72QF&role=attend
Konu: REST Bazlı WCF Servisleri ve WCF Rest Starter Kit
Konuşmacı: Burak Selim ŞENYURT
Zaman: 26 Mayıs 2009 Salı 21:00-22:00
Adres: https://www.livemeeting.com/cc/mvp/join?id=T9FM2B&role=attend
Konu: XNA Game Studio ile 3D Oyun Geliştirme-1
Konuşmacı: Cemil UZUN
Zaman: 27 Mayıs 2009 Çarşamba 21:00-22:00
Adres: https://www.livemeeting.com/cc/mvp/join?id=9QPZ6Q&role=attend