Google da ara

 

Temmuz 2010
Pts Sal Çar Per Cum Cts Paz
« Haz    
 1234
567891011
12131415161718
19202122232425
262728293031  

Google Reklamları

Dil Seçimi

Bağış yada Ödeme

PLINQO – Professional LINQ to Objects

PLINQO Codesmith tarafından geliştirilmiş bir codesmith template idir. Standart Visual Studio 2008 Linq to SqlClasses template i tarafından çıkartılan class ları özelleştirmek sıkıntılı olduğundan, daha özelleştirilebilir bir Linq to Sql veri katmanı oluşturmak için çıkmıştır.

Codesmith in Visual Studio ile entegre çalıştığını da düşünürsek, bu template ile birlikte çok kolay bir şekilde Dbml ve ona bağlı classları oluşturabilmekteyiz. Aşağıda bir projeye eklenmiş Plinqo template inin sağ tık menüsünün nasıl olduğunu görebilirsiniz.

Visual Studio 2008 de projeye eklendiğinde görünen menü.

Visual Studio 2008 de projeye eklendiğinde görünen menü.

Hergün gelişen bu template ile ilgili ayrıntılı bilgiyi şu adreslerden edinebilirsiniz:

http://www.codeproject.com/KB/linq/PLINQO.aspx

http://code.google.com/p/codesmith/

XtraGridControl ve Linq EntitySet Refresh problemi

Devexpress 8.2.6 sürümünde XtraGridControl ile yaşadığım refresh problemi şu şekilde gerçekleşti : EntitySet i datasource olarak verdikten sonra, arka planda eklediğim herhangi bir entity grid üzerinde görünmemekteydi. Yani sadece grid üzerinden yaptığım değişiklikler görünüyor, arkaplandaki değişiklikler EntitySet nesnesi üzerinde debug anında görünmesine rağmen, grid üzerinde görünmüyordu.
Problemi teşhis ettikten sonra, ilk olarak grid nesnemin üzerindeki RefreshDataSource() methodunu denedim ancak; problemi gidermedi.
Sonrasında grid üzerindeki DataSource property sini tekrar aynı EntitySet nesnesini göndererek set ettim ve bir umutla çalıştırdım. Herhangi bir değişiklik yoktu.

Çözüm:

EntitySet<T> nesnemin methodlarına gözatarken GetNewBindingList() methodu dikkatimi çekti. Sorunun çözümü olduğunu düşünerek , hemen denedim ve bingo, sorun giderilmişti.

Niçin böyle bir methoda gerek duyulduğunu henüz anlamış değilim ancak anladığımda burada yayımlıyor olacağım.

Resharper .Net yazılımcısının yoldaşı

Resharper birçok kolaylaştırıcı özelliği (Anlık debugging,Hızlı Refactor,Gelişmiş snippet sistemi, Geliştirilmiş Intellisense) bulunan bir Visual Studio add-in’idir.
Deneme sürümünü resmi web sitesinden edinebilir. Visual Studio ile kod yazmayı daha zevkli hale getirebilirsiniz.

Linq ile işe yarar birşeyler…

 C#
3.5 ile gelen yeni özelliklerden birtaneside Linq ve Lambda bi kaç gün önce yeni projemde
kullanmaya başladığım bir kaç özelliğinden işe yarar bulduğum yanlarını yazıyım istedim.

Bir formunuz(Form) ve içinde birden çok buton var ve siz sadece buton yazısı(Button.Text)
içinde Ekle geçenleri bulmak istiyorsunuz lambda olmadan bunu şu şekilde yapabiliyorduk
:

            List<Button>
bulunanlar
= new List<Button>();

            foreach (Control
c
in this.Controls)

            {

                if (c is Button)

                {

                    Button
btn
= (Button)c;

                    if(btn.Text.Contains(“Ekle”))

                        bulunanlar.Add(btn);

                }

            }

 

Linq
ile gelen extension methodları kullanarak şu şekilde daha az yazarak yapabiliyoruz..

           
var linqIleBulunanlar
= from
btn
in this.Controls.OfType<Button>()
where btn.Text.Contains(
“Ekle”)
select btn;
            List<Button>
bulunanlar
= linqIleBulunanlar.ToList();

Burada
var değişken tipi Object gibi herşeyi barındırabilen bir veritipi herhangi birşeye
dönüşüm yapmadan direk methodlarını ve propertylerini kullanabiliyoruz aslında
burdaki var IEnumerable<Button> tipine otomatik olarak dönüşüyor ve böylece ToList()
methodunu Object de olduğu gibi dönüşüm yapmadan kullanabiliyoruz.

aynı işlemi
var yerine Object kullanarakta şu şekilde yapabilirdik :

            object linqIleBulunanlar = from
btn
in this.Controls.OfType<Button>()
where btn.Text.Contains(
“Ekle”)
select btn;

            List<Button>
bulunanlar
= ((IEnumerable<Button>)linqIleBulunanlar).ToList();

 

Ancak
bu şekilde yaptığımızda bazı durumlarda Object not cast… hatası alabiliyoruz. var
tipi bizi bu dönüşümlerden(cast) den kurtaran bir c sharp 3.5 yeniliği. Şuan için
bildiğim tek eksi yönü object gibi methodlara parametre olarak gönderilemiyor ki biraz
düşündüğümüzde aslında mantıklı.


var
ın ne olduğunu anladıktan sonra gelelim Linq sorgusuna sorguya “from” ile başlıyoruz
ve sonrasında sorgu içerisinde kullanacağımız değişken ismini yazıyoruz(btn) ardından
“in” yazıp içinde arama yapacağımız List Array yada IEnumerable ı yazıyoruz. Burda
kullandığımız list this.Controls.OfType<Button>() , this.Controls tanıdık gelmesine
rağmen sonundaki OfType<Button>() methoduna çoğumuz yabancıyız bu yine C# 3.5
ile gelen Extention Method kavramıyla yapılmış bir ek method ve yaptığı işlem çalıştığı
list içinde generic parametre ile aldığı tipteki elemanları döndüren bir method burdaki
kullanma amacımız Formdaki kontroller arasından sadece Button olanların arasında arama
yapmak (içinde “Ekle” geçen bir label in gelmesini istemiyoruz) daha sonra “where”
yazıp ardından arama kriterimizi giriyoruz bu kriter bildiğimiz if içinde yazdığımız
kriterler gibi bool döndürmesi gerekiyor btn.Text.Contains(”Ekle”) ile Text property
sinin içinde “Ekle” geçmesi gerektiğini belirtiyoruz ve son olarak “select” ardından
listesini döndürmek istediğimiz şeyi yazıyoruz biz burda Button ları döndürmek istediğimiz
için btn yazdık ancak sadece Buttonların Name ini döndüren bir string dizisi istiyorsak
btn.Name de yazabilirdik.