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

1 yorum:

Adsız dedi ki...

bu makalede guzel..........saolun.........Azerbaycan