Sayfayı Yazdır | Pencereyi Kapat

LINQ ve GenericList

Nereden Yazdırıldığı: Datakent
Kategori: Diğer bölümler
Forum Adı: C# & ASP.NET
Forum Tanımlaması: C# ve ASP.NET ile ilgili soru / sorun ve paylaşım bölümü
URL: http://forum.datakent.com/forum_posts.asp?TID=1892
Tarih: 29.Mart.2024 Saat 12:17


Konu: LINQ ve GenericList
Mesajı Yazan: murat turan
Konu: LINQ ve GenericList
Mesaj Tarihi: 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();

        }
    }



-------------
http://www.kasatakip.com - Kasa Takip  |  http://www.caritakip.com - Cari Takip  |  http://www.evraktakip.com - Evrak Takip  |  http://www.etasqlmobil.com - ETA SQL Mobil



Cevaplar:
Mesajı Yazan: murat turan
Mesaj Tarihi: 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);
                }
            }


-------------
http://www.kasatakip.com - Kasa Takip  |  http://www.caritakip.com - Cari Takip  |  http://www.evraktakip.com - Evrak Takip  |  http://www.etasqlmobil.com - ETA SQL Mobil


Mesajı Yazan: murat turan
Mesaj Tarihi: 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();
        }
    }


-------------
http://www.kasatakip.com - Kasa Takip  |  http://www.caritakip.com - Cari Takip  |  http://www.evraktakip.com - Evrak Takip  |  http://www.etasqlmobil.com - ETA SQL Mobil


Mesajı Yazan: murat turan
Mesaj Tarihi: 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);


-------------
http://www.kasatakip.com - Kasa Takip  |  http://www.caritakip.com - Cari Takip  |  http://www.evraktakip.com - Evrak Takip  |  http://www.etasqlmobil.com - ETA SQL Mobil


Mesajı Yazan: murat turan
Mesaj Tarihi: 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();
        }



-------------
http://www.kasatakip.com - Kasa Takip  |  http://www.caritakip.com - Cari Takip  |  http://www.evraktakip.com - Evrak Takip  |  http://www.etasqlmobil.com - ETA SQL Mobil



Sayfayı Yazdır | Pencereyi Kapat