Datakent Ana Sayfa
Anasayfa Anasayfa > Diğer bölümler > C# & ASP.NET
  Aktif Konular Aktif Konular RSS: LINQ ve GenericList
  Yardım Yardım  Hızlı Ara   Kayıt Ol Kayıt Ol  Giriş Giriş

LINQ ve GenericList

 Yanıt Yaz Yanıt Yaz
Yazar
Mesaj
murat turan Açılır Menü Göster
Admin Group
Admin Group
Simge
Datakent

Kayıt Tarihi: 01.Ekim.2003
Bulundugu Yer: Turkey
Online: Sitede Değil
Gönderilenler: 1771
  Alıntı murat turan Alıntı  Yanıt YazCevapla Mesajın Direkt Linki Konu: LINQ ve GenericList
    Gönderim Zamanı: 11.Nisan.2010 Saat 10:44


    class veriler
    {
        public string adi { get; set; }
        public string soyadi { get; set; }
        public double ucreti { get; set; }

        public override string ToString()
        {
            return String.Format("{0} {1}", adi, soyadi);
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            List<veriler> vr = new List<veriler>() {
                new veriler(){adi="murat",soyadi="turan", ucreti=19},
                new veriler(){adi="kadir",soyadi="sağlam", ucreti=87},
                new veriler(){adi="duygu",soyadi="sipahi",ucreti=54},
                new veriler(){adi="murat",soyadi="bakdur", ucreti=44}
            };

            //asagidakiyle ayni. burada type inference (tip tahmini) soz konusudur
            var vx = vr.FindAll(p => p.adi =="murat");

            var vy = vr.FindAll((veriler p) => p.adi == "murat");

            //buda yukaridakilerle ayni sonucu donduruyor. fark arada ek kod blogu vardir
            //ve sarta uyan satirlarda soyad buyuk harfe dondurulur. return true olması
            //adi murat olanlarin vy2 ye eklenecegi digerlerinin reddedilecegi anlamina gelir.
            //burada Predicate temsilcisinin bool sonuc istemesi disinda metod cagrisida yapilabilmektedir.

            var vy2 = vr.FindAll(p => {
                if (p.adi == "murat")
                {
                    p.soyadi = p.soyadi.ToUpper();
                    return true;
                }
                else return false;
            });


            foreach (var item in vy2)
            {
                Console.WriteLine(item);
            }

            Console.WriteLine("");

            //benzer islem linq ile. yine benzer sonuc donecektir.
            var vq = from q in vr.AsEnumerable()
                     where q.adi.Equals("murat")
                     select q;

            var vq2 = from q in vr.AsEnumerable()
                      where q.adi.Equals("murat")
                      select new { q.soyadi, q.adi };

            //burada ise adi murat olan kayitlarin maas toplamlari bulunmustur
            double maastoplam = vr
                .Where<veriler>(p => p.adi == "murat")
                .Sum<veriler>(p => p.ucreti);

            Console.WriteLine("maas toplamlari: {0}", maastoplam);


            Console.ReadLine();

        }
    }



Düzenleyen murat turan - 11.Nisan.2010 Saat 11:01
Yukarı Dön
murat turan Açılır Menü Göster
Admin Group
Admin Group
Simge
Datakent

Kayıt Tarihi: 01.Ekim.2003
Bulundugu Yer: Turkey
Online: Sitede Değil
Gönderilenler: 1771
  Alıntı murat turan Alıntı  Yanıt YazCevapla Mesajın Direkt Linki Gönderim Zamanı: 11.Nisan.2010 Saat 10:45
benzer bir işlemin DataTable  üzerine uygulanışı;
 
            using (SqlConnection scon = new SqlConnection(@"Data Source=SERVER\SQLEXPRESS;Initial Catalog=test2;Persist Security Info=True;User ID=sa;Password=1881"))
            {
                scon.Open();
                DataTable dtbl = new DataTable();
                SqlDataAdapter scom = new SqlDataAdapter("SELECT rid, stok_no, stok_adi, fiyat1, fiyat2 FROM stok_kartlari", scon);
                scom.Fill(dtbl);
                scon.Close();
                var xy = from q in dtbl.AsEnumerable()
                         where Convert.ToDouble(q["fiyat1"]) > 20
                         select new
                         {
                             rid = Convert.ToInt32(q["rid"]),
                             sno = q["stok_no"].ToString()
                         };

                foreach (var item in xy)
                {
                    Console.WriteLine(item);
                }
            }
Yukarı Dön
murat turan Açılır Menü Göster
Admin Group
Admin Group
Simge
Datakent

Kayıt Tarihi: 01.Ekim.2003
Bulundugu Yer: Turkey
Online: Sitede Değil
Gönderilenler: 1771
  Alıntı murat turan Alıntı  Yanıt YazCevapla Mesajın Direkt Linki Gönderim Zamanı: 11.Nisan.2010 Saat 13:06
linq son:
 
    class veriler
    {
        public string adi { get; set; }
        public string soyadi { get; set; }
        public double ucreti { get; set; }
        public override string ToString()
        {
            return String.Format("{0} {1}", adi, soyadi);
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
            List<veriler> vr = new List<veriler>() {
                new veriler(){adi="murat",soyadi="turan",ucreti=98},
                new veriler(){adi="mustafa",soyadi="yoldaş",ucreti=87},
                new veriler(){adi="onursal",soyadi="özcan",ucreti=45},
                new veriler(){adi="murat",soyadi="bakdur",ucreti=41},
                new veriler(){adi="abdullah",soyadi="mara",ucreti=88},
                new veriler(){adi="mustafa",soyadi="eren",ucreti=18},
                new veriler(){adi="mustafa",soyadi="baysal",ucreti=78},
                new veriler(){adi="mustafa",soyadi="altıparmak",ucreti=178}
            };
           
            //ilk iki kaydi atla ve sonraki 3 kaydi getir. bunu bir SQL db ve LINQ ile kullandiginda SQL Script de "row_number" ile benzer islem yapmakta. bu islem SQL DB uzerinde yapildiginda SQL server'a   SELECT ROW_NUMBER() OVER ...... sorgusu gitmekte (!)
            //ozelligi islemekte.
            var py = vr.Skip<veriler>(2).Take<veriler>(3);
            foreach (var item in py)
            {
                Console.WriteLine(item);
            }
           
            //linq ile sonuca sanal alan eklemek
            var px = from x in vr
                     select new
                     {
                         x.adi,
                         x.soyadi,
                         snc = x.ucreti > 50 ? "zam yok" : "zam var"
                     };
               
            foreach (var item in px)
            {
                Console.WriteLine(item);
            }

            Console.ReadLine();
        }
    }


Düzenleyen murat turan - 11.Nisan.2010 Saat 13:09
Yukarı Dön
murat turan Açılır Menü Göster
Admin Group
Admin Group
Simge
Datakent

Kayıt Tarihi: 01.Ekim.2003
Bulundugu Yer: Turkey
Online: Sitede Değil
Gönderilenler: 1771
  Alıntı murat turan Alıntı  Yanıt YazCevapla Mesajın Direkt Linki Gönderim Zamanı: 21.Nisan.2010 Saat 06:38
yeni bir lambda örneği; (lambda  :  => )
 
int[] source = new[] { 3, 8, 4, 6, 1, 7, 9, 2, 4, 8 };
 
foreach (int i in source.Where(x => x > 5))
    Console.WriteLine(i);


Düzenleyen murat turan - 21.Nisan.2010 Saat 06:39
Yukarı Dön
murat turan Açılır Menü Göster
Admin Group
Admin Group
Simge
Datakent

Kayıt Tarihi: 01.Ekim.2003
Bulundugu Yer: Turkey
Online: Sitede Değil
Gönderilenler: 1771
  Alıntı murat turan Alıntı  Yanıt YazCevapla Mesajın Direkt Linki Gönderim Zamanı: 21.Nisan.2010 Saat 15:33
//ve predicate ve select new bir arada
 
        static void Main(string[] args)
        {

            List<dataCls> dataList = new List<dataCls>();
            dataList.Add(new dataCls() { id = 1, adi = "ali", yasi = 15 });
            dataList.Add(new dataCls() { id = 2, adi = "veli", yasi = 12 });
            dataList.Add(new dataCls() { id = 3, adi = "cemal", yasi = 25 });
            dataList.Add(new dataCls() { id = 4, adi = "kadir", yasi = 18 });

//yasi 15 den buyuk olanlari seç ve sınıfta tanımlı ad ve yas alanlarını döndür. ? id dönmeyecek
            var test = from x in (dataList.FindAll(p =>
            {
                if (p.yasi > 15)
                {
                    return true;
                }
                else
                {
                    return false;
                }
            }))
                       select new { x.adi, x.yasi };


            foreach (var item in test)
            {
                Console.WriteLine("{0} {1}", item.adi, item.yasi);
            }
           

            Console.ReadLine();
        }



Düzenleyen murat turan - 21.Nisan.2010 Saat 15:34
Yukarı Dön
 Yanıt Yaz Yanıt Yaz

Forum Atla Forum İzinleri Açılır Menü Göster



Bu Sayfa 0,141 Saniyede Yüklendi. [power by : WebWiz]