28 Ağustos 2009

Windows Vista SP2 ve Windows 7 İçin Yeni NetCFSvcUtil !

Merhaba,

Deneyenler ya da ilgilenenler bilecektir, .Net Compact Framework üzerinde halihazırda kullanıyor olduğumuz WCF Service proxy' lerini oluşturmak için "command line" üzerinden çalıştırılan "çok önemli bir araç" bulunmaktadır. NetCFSvcUtil.exe.

Bu araç vasıtasıyla WCF Service proxy' lerini oluşturmakta ve akabinde WCF Service çağrılarını yapabilmektesiniz.

Her nedendir ki bu araç Windows Vista SP2 ve Windows 7 üzerinde çalışmamakta, Proxy generation sürecinde hata vermekte ve çıldırtmaktaydı. Neyseki "uzuun" zamandır güncellenmeyen .Net Compact Framework Team blog' u üzerine 10 ağustos' ta eklenen çok önemli bir blog girdisini paylaşmak istiyorum.

NETCFSvcUtil.exe fix :
"
Check out Manish’s blog on NetcfSvcUtil.exe crashing on some operating systems and the uploaded fix for it here."

Evet ! , bu işi "en sonunda" düzeltmişler. 7 Ağustos itibariyle adresinden güncellenmiş NetCFSvcUtil' i indirebilirsiniz.

Devamını Oku...

27 Ağustos 2009

Microsoft Yaz Okulu 2009 | İzmir

Merhaba,

26 Ağustos 2009 günü Microsoft Yaz Okulu 2009 serisinin son durağı olan İzmir - İzmir Yüksek Teknoloji Enstitütüsündeydim. Havalimanından itibaren aşağı yukarı 1 saatlik "çeşme istikametine" doğru bir yolculuktan sonra (Evet Çeşme :) ) üniversiteye vardım.

Çok kalabalık, çok keyifli bir gündü. Özellikle kampüsün konumu ve havasının serinliği günün yorgunluğunu aldı götürdü.

Mobil teknolojiler üzerine bolca sohbet ettik, örnek uygulamalar geliştirdik.



Kısacası, güzel ve kalabalık bir gündü. Geliştirilen örnek uygulamayı buradan indirebilirsiniz.

Devamını Oku...

Microsoft Yaz Okulu 2009 | İstanbul

Merhaba,

Fotoğrafların biraz geç ulaşması :) ve iş yoğunluğu sebebiyle gerçekleşen fakat blog' a bir türrlü ekleyemediğim bir etkinlikten bahsetmek istiyorum. Microsoft Yaz Okulu 2009 | İstanbul. 18 Ağustos 2009 tarihinde Microsoft Türkiye İstanbul ofisinde keyifli bir gün geçirdik.

Mobil cihaz uygulamaları hakkında bol bol sohbet ettik, vaktiğimiz elverdiğince örnek uygulamalar geliştirdik.



Eğitim kadrosu ! :)



Arkadaşlar Microsoft Türkiye ofisin terasın keyfini bolca çıkarttılar :)

Kısacası keyifli bir gündü. Geliştirilen örnek uygulamayı buradan indirebilirsiniz.

Devamını Oku...

23 Ağustos 2009

.Net Compact Framework 3.5 – LINQ Uygulamaları – Linq To Dataset

Konu ile ilgili bir önceki yazımızda ifade ettiğimiz üzere .Net Compact Framework 3.5 ile birlikte artık mobil cihaz uygulama geliştiricileri bu platform üzerinde geliştiriyor oldukları uygumalarda “belirli sınırlar” içerisinde LINQ (Language Integrated Query) olarak ifade edilen altyapı ile “doğal yollarla” ellerindeki kaynakları sorgulayabilmektedirler. Bu bağlamda .Net Framework üzerinde LINQ üzerine onlarca farklı provider geliştirilmiş ve halen de geliştirilmeye devam edilmektedir.

Daha önce de ifade ettiğimiz üzere .Net Compact Framework üzerinde LINQ aşağıdaki sınırlar çerçevesinde desteklenmektedir ;

  • Standart Query Operators
  • Linq To Dataset
  • Linq To XML

Bu yazımızda Linq To Dataset tarafındaki altyapıyı inceleyecek, LINQ ile mobil cihaz uygulamaları geliştirirken Dataset, DataTable ve DataRow’ lar üzerinde sorgulama işlemlerinin nasıl gerçekleştirileceğini örneklendireceğiz.

Dataset – DataTable – DataColumn - DataRow

Bilindiği üzere başlıkta yazan temel 4 kavram Ado.Net Disconnected (Bağlantısız) mimarinin temel yapı taşları olmaktadır. Bu noktada hedef herhangi bir x veri kaynağından gelen relational (ilişkisek) verilerin memory üzerinde konumlandırılması, ve verilerin herhangi bir t anında manipule (Add, Delete, Modify) edilmesi ve tekrardan merkezi verikaynağına gönderilmesi ise Ado.Net üzerinde tanımlı olan sınıflar (xxxDataAdapter, xxxDataReader, xxxCommand, xxxConnection v.b.) vasıtasıyla verilerin çekilmesi ve bu verilerin “memory üzerindeki veritabanımız” olarak kabaca ifade edebileceğimiz DataSet’ ler içerisinde oluşturduğumuz DataTable’ lara yüklememiz gerekmektedir.

DataSet genel olarak aşağıdaki hiyeraşri ile oluşturulmaktadır.

Resimden de anlaşılabileceği üzere DataSet provider bağımsız bir veri saklama, yönetme v.b. otamıdır. Siz DataSet’ in verilerini herhangi x bir veri kaynağı üzerinden çekebileceğiniz gibi örneğin bir web servis ya da bir WCF servis çağrısı sonucunda gelen XML üzerinden de yükleyebilmektesiniz. Genel olarak DataSet bir Container görevi görmekte, veriler DataSet içerisindeki DataTable’ lar üzerinde konumlandırılmaktadır. DataTable ise DataColumn (Sütunlar) ve DataRow (Satırlar) koleksiyonlarından oluşmaktadır. Ayrıca bu DataTable ‘ lar arasında DataSet seviyesinde DataRelation (İlişkiler) konumlandırarak ilintili kayıtlar arasında dolaşabilekteyizdolaşabilmekteyiz.

Bu noktaya kadar kısa bir DataSet – DataTable – DataColumn – DataRow kavramları hakkında bilgi sahibi olduk. Sıra geldi yazımızın asıl konusuna.

Normalde şartlarda DataTable üzerindeki bir verinin sorgulanması “çok sınırlı” olarak sınıf üzerindeki Select fonksiyonu ya da bu DataTable üzerinden oluşturulan bir DataView objesinin Filter özelliği vasıtasıyla “belirli sınırlar içerisinde” gerçekleştirilebilmektedir. Bu noktada daha kapsamlı bir sorgulama altyapısının olması, en azından halihazırda kullanıyor olduğumuz sql-tipi sorgulama altyapısının uygulanabilir olması uygulama geliştiricilere ciddi avantajlar kazandıracaktır.

Linq To Dataset bize bu altyapıyı sunmaktadır. .net Compact Framework 3.5 ile birlikte gelen System.Data ve System.Data.DataSetExtensions referanslarının projeye eklenmesinin sonusunda DataTable, DataRow ve DataView sınıfları içerisinde bu sorgulamaya altyapı sağlayacak konu ile ilgili birkaç Linq Extension Method’ u gelmektedir.

IntelliSense üzerinden DataTable’ a baktığımızda ise ;

İki adet çok kritik extension method gelmektedir. AsDataView Extension Method’ u DataTable üzerinden direk DataView oluşturmaya, AsEnumerable extension method’ u ise tablo içerisindeki DataRow’ ların içerisinde bulunduğu “içi dolu” bir EnumerableRowCollection instance’ ı dönmektedir. Mükemmel. Bilindiği üzere LINQ temel anlamda IEnumerable üzerinde konumlandırıldığı düşünülürse bu tip bir kaynağın sorgulanması ciddi anlamda kolaylaşacaktır.



İşte tanıdığımız bir sürü extension method !

Bu noktada birkaç detayı daha netleştirelim. Bilindiği üzere DataSet’ ler “hazırlanışlarına göre” 2 farklı şekilde olabilmektedir ; typed ve untyped.

Typed DataSet’ ler “genellikle” bir code-generator tarafından oluşturulan ve içeriğine “daha hakim olabileceğimiz” cinsten DataSet’ lerdir. Örneğin, DataSet içerisinde 2 adet DataTable oluşturulduğunu varsayalım ; Employees ve Orders. Bu tablolara standart olarak ;

ulaşabilmekteyiz. Typed olan bir DataSet içerisindeki structure, veri kaynağına bakarak hazırlanacağından, yukarıdaki yönteme “alternatif” olarak şu şekilde de ulaşabileceğimiz bir model “code generetor” tarafından oluşturulmaktadır ;



Bu yöntem “eğer uygulanabiliyorsa” ciddi bir avantaj oluşturmakta, DataSet’ in yapısını anlamamıza ve işlem yapmamıza çok daha fazla olanak sağlamaktadır.

Genel olarak Linq To Dataset ile Typed ve UnTyped DataSet’ ler üzerinde sorgulama ya da filtreleme işlemleri gerçekleştirebilmektesiniz.

Gelelim uygulama örneklerine. Örneğimizde hem Typed hem Untyped DataSet’ ler kullanarak Linq To Dataset kod blokları geliştireceğiz. Bu noktada Typed DataSet’ i Northwind’ in Sql Server Compact Edition için hazırlanmış örnek veritabanı üzerinden “otomatik” olarak oluşturacağız.

Projemize bu örnek veritabanını ;

Patikası üzerinden ekliyoruz ; ve ekrana gelen Typed Dataset oluşturma sihirbazından Orders ve Employees Tablolarını seçiyoruz. İşlem sonucunda aşağıdaki şemaya sahip bir DataSet’ in projemiz içerisinde oluşturulmuş olması gerekmektedir.

Ayrıca, verilerin doldurulabilmesi adına her DataTable ile ilişkili TableAdapter’ ler ise otomatik olarak eklenmiştir.

Sıra geldi bu verileri sorgulamaya. Linq To Dataset içerisinde Standart Query Operators olarak ifade edilen operatörleri kullanabilmektesiniz. Sorgulama hem query expression yöntemiyle hem de extension method’ lar ile gerçekleştirilebilmektedir.

Uygulamamızın yüklenmesiyle birlikte veritabanı üzerinden Employees ve Orders tablolarını dolduruyoruz.

Ve sorgulamaya başlıyoruz. İlk örneğimizde Employees DataTable’ ı içerisinde EmployeeId değeri 5’ ten büyük olan DataRow’ ları seçelim ve Firstname değerlerine göre tersten sıralatalım.


Uygulama çalıştırılıp Button’ a basıldığında ise ;

Yukarıdaki sonuç kümesi elde edilmektedir. Id’ si 5’ ten büyük olan personellerin Firstname’ e göre tersten göre sıralanmış hali.

Bu noktada kod bloğunu biraz açıklamamız gerekmektedir.


Öncelikle dikkat edilirse sorgulama modeli Linq To Dataset’ te en ufak bir farklılık taşımamaktadır. Standart Query Expression modeli ile birebir aynıdır. Bu noktada dikkat çeken 2 adet nokta bulunmaktadır. Bunlardan ilki “r” sembolik adıyla anlık olarak temsil edilen DataRow sınıfı içerisinde normal şartlarda olmayan bir extension method’ un olmasıdır ; Field.

Bu method, aranan kolon değerini, kendisine gönderilen kolon ismi üzerinden arayarak generic parametresine verilen tipte geri döndürmektedir. Bu noktada Employee Id kolon değerini int tipinde kullanıcıya döndürmekte ve incelemeye olanak sağlamaktadır. Süper ! Sorgulama esnasında tam ihtiyaç duyabileceğimiz bir extension method. Bunun dışında bir extension Method daha DataRow üzerinde gelmektedir ; SetField. Bu method ise belirlenen kolon’ a T generic parametresinde belirtilen değer tipiyle gönderilen değeri kaydetmektedir.

Kod bloğunu incelemeye devam ediyoruz. Sorgu sonucunda elimize OrderedEnumerableRowCollection tipinde bir sonuç kümesi dönmektedir. Bu sonuç kümesini bu haliyle Complex DataBinding gerçekleştirebilecek bir kontrole (Örn : DataGrid) DataSource olarak gönderememekteyiz. DataSource’ un IList’ i implemente etmesi gerekmektedir.

Bu noktada hem IList noktasında hem de bir sonraki aşamada filtreleme yapabilmek adına en mantıklı çözüm DataView olmaktadır. Linq To Dataset paketi içerisinde gelen Extension Method AsDataView() ile elimizdeki EnumerableRowCollection topluluğunu tek bir method ile DataView’ a çevirebilmekte, DataSource olarak gönderebilmekteyiz.

Farklı bir örnek üzerinde çalışalım. Bilindiği üzere ilişkili tablolar sql tarafında Join sorguları ile ortaklaşa sorgulanabilmekte, birden fazla tablo üzerinden alınan veriler birleştirilebilmektedir.

Linq To Data üzerinde de join sorguları gerçekleştirebilmektesiniz ! Örneğimizde Orders tablosu ile Employees tablosu arasında Employee Id alanı üzerinden bir ilişki bulunmaktadır.

Hedefimiz ; Orders tablosundan satış bilgilerini almak ve bunun yanında Employee Id yerine bu satış ile ilişkili personelin Ad – Soyad (Firstname + Lastname) bilgilerini almaktır. Her iki tabloyu Load’ ta doldurduktan sonra aşağıdaki sorguyu çalıştırıyoruz :

Bu noktada sonuç kümesinin DataRow’ lardan oluşmamasından ötürü sonuç kümesini DataView’ e dönüştürememekteyiz. Fakat DataGrid IList implemantasyonunu sağlayan List değerlerini gösterebildiğinden Sonuc ‘ u ToList() method’ u ile List e çeviriyoruz. Ve sonucunda aşağıdaki görünümü elde ediyoruz ;

Peki, şu ana kadar tüm bu örnekleri Typed DataSet’ e uygun olarak hazırladık. Ya elimizde structure’ ı hakkında bu şekilde çalışamayacağımız, untyped bir DataSet olsaydı ? Yukarıdaki sorguyu UnTyped DataSet’ e uygun olarak tekrar yazıyoruz ;



Yukarıdaki kod bloğu dikkatlice incelenirse bir önceki kod bloğu ile arasında hem farklar hem de benzerlikler olduğu rahatlıkla anlaşılabilecektir. Gelelim farklılıklara ;

Bir önceki kod bloğunda TypedDataTable olarak DataSet’ in Employees özelliği üzerinden DataTable’ a direk ulaşıyor, join uygulayabiliyorduk. Bu noktada DataTable normalin dışında System.Data.TypedTableBase sınıfından kalıtım aldığından direk olarak join uygulanabilmektedir. (Çünkü bu kalıtım sonucunda DataTable IEnumerable implemente etmektedir). Fakat UnTyped DataTable IEnumerable implemente etmediğinden join operasyonlarına sokulamamaktadır. Bunu aşabilmek adına UnTyped DataTable içerisinde AsEnumerable() adında bir extension method bulunmakta, tablo içerisindeki DataRow’ ları sorgulayabilecek yapıya dönüştürmektedir.

Bunun dışında alanlara direk “özellikler üzerinden” ulaşamamakta (Örn : Employees.Employee_ID), DataRow içerisinde bulunan Field generic extension method’ u ile ulaşılmaktadır. (Örn : en.Field(“Employee Id”)). Kod bloğunu çalıştırdığımızda ise birebir aynı sonucu almaktayız.

İşte bu kadar !

Bütün bunların dışında gelen sorgu sonucu üzerinde diğer extension methodları kullanarak (sum, count v.b.) birçok işlemi gerçekleştirebilmektesiniz.

Bu yazımızda genel olarak Linq To Dataset kavramına değindik. Örnek uygulamayı sisteme aktardıktan sonra buradan yayınlayacağım. Bir başka yazıda görüşmek dileğiyle.

Devamını Oku...

18 Ağustos 2009

.Net Compact Framework 3.5 – LINQ Uygulamaları – Standart Query Operators

Hiç şüphesiz .Net Compact Framework 3.5 ile birlikte gelen “sınırlı” LINQ (Language Integrated Query) desteği .Net Compact Framework managed mobil cihaz uygulama geliştiricilerin uygulama geliştirme sürecini ciddi anlamda kolaylaştıran en önemli yeniliklerin başında ifade edilebilmektedir. .Net Framework 3.5 ile birlikte uygulama geliştirme ortamında yerini bulan ve günümüzde bakıldığında üzerine onlarca “Provider” geliştirilen LINQ, birçok yazılım geliştiricinin yazılım geliştirme sürecini hızlandırmakta, okunması, anlaşılması ve yazılması her zaman daha sevimli ve daha kolay olan “sql-tipi” sorgulama modelini .Net ortamına getirmektedir. .Net Uygulama Geliştirme platformu üzerinde resmi dil olarak kabul edilen C# (C-Sharp) ve VB.NET (Visual Basit .Net) programlama dilleri kullanılarak, bu dillerin compiler (derleyici)’ ları üzerinde yapılan geliştirmeler sonucunda uygulama geliştiriciler birçok farklı “veri setine” “doğal yöntemlerle” ulaşabilmekte ve bu verileri “doğal yöntemlerle” sorgulayabilmektedir. Doğal yöntemler olarak katedilen metoloji, hali hazırda veri sorgulama işlemlerinde kullanıyor olduğumuz select, from, join, where v.b. gibi sorgulama kelimelerinin programatik ortamda kullanılmasıdır. LINQ (Language Integraed Query), temelinde bize bu olanağı sağlamakta, derleyicilere bu yeteneği kazandırmaktadır. Bir diğer bakış açısıyla LINQ, IEnumerable (Tahmin edin bu arayüzü kaç sınıf implement etmekte ve kaç arayüz bu arayüzden kalıtım almakta) kaynaklı tüm koleksiyonları sorgulamamıza olanak sağlamaktadır.

Örneğin ;



kod satırları string bir dizi üzerinde dizi elemanlarının metinsel uzunluğu 3 karakterden fazla olan elemanları listelemesini öngörmektedir.

LINQ ile iki farklı metodoloji ile sorgulama gerçekleştirebilmekteyiz. Bunlardan ilki yukarıdaki ekran görüntüsünde ifade edilen ve “Query Expression” olarak tabir edilen native keyword’ ler ile sorgulama yapmak, diğeri ise “aslında yukarıdaki yazılanların da derleme zamanında otomatik olarak uygun olan Extension Method’ lara çevrildiği” metot çağrıları ile sorgulama yapmaktır. Örneğin yukarıdaki sorguyu ;



Şeklinde de çalıştırabilmekteyiz.

Evet, LINQ çağrıları derleme anında IEnumerable tipi için .Net Framework 3.5 üzerinde tanımlanan Extension method çağrılarına dönüştürülmekte ve sonuçlar üretilmektedir. Bu Extension Method’ larının kullanılabilmesi için uygulama içerisine System.Linq referansının eklenmesi ve bu referansın kod ekranı üzerinde “using” ile belirtilmesi gerekmektedir.
Referanslardan ilgili referansı eklemeli ;



Ve System.Linq ‘ i kod ekranına “using” ile tanımlamamız gerekmektedir.



Peki IEnumerable üzerinde tanımlı Extension Method’ lar nelerdir ? Bu sonuca ulaşabilmenin onlarca yöntemi bulunmaktadır. En kolayı uygulama geliştirme ortamında System.Linq.Enumerable üzerine sağ tıklamak ve “Go To Definition” seçeneğine tıklayarak metadata üzerinden bu listeye ulaşmaktadır.



“LINQ Standart Query Operators” olarak adlandırılan bu fonksiyon seti, temel olarak bir veri seti üzerinde ihtiyaç duyulabilecek neredeyse tüm işlemleri gerçekleştirmeye yarayan “Extension Method" ' lardan oluşmaktadır. Bu setin içideki tüm fonksiyonların ne işe yaradığını
http://msdn.microsoft.com/en-us/library/system.linq.enumerable_members.aspx adresinden detaylıca öğrenebilirsiniz.

Bütün bunların dışında yazının başında da belirttiğimiz üzere LINQ’ in bize sunduğu Iqueryable arayüzü sayesinde LINQ ile onlarca veri kaynağını sorgulayabileceğimiz sanal “LINQ Provider” ‘ ları oluşturabilmekteyiz. LINQ, standart olarak memory üzerinde konumlandırılmış olan koleksiyonlar sorgulayabilecek LINQ To Objects, Sql Server üzerinde tanımlı olan bir veritabanını sorgulayabilecek LINQ To SQL, Xml içerikli dosyaları, verileri sorgulayabilecek LINQ To XML, Ado.Net Entity Framework altyapısını kullanarak Entity objelerimizi sorgulayabilecek LINQ To Entities, Dataset + Datatable objelerini direk sorgulayabileceğimiz LINQ To Dataset gibi 10’ a yakın provider ile gelmekte, ve gün geçtikçe farklı veri kaynakları için yeni provider’ lar geliştirilmektedir. Bu bağlamda bakıldığında LINQ uygulama geliştiricilere ciddi bir kapı aralamış ve uygulama geliştirme süreçlerini hızlandırmıştır.

Hızlı bir şekilde yazımızın ana konusuna dönersek, bu yazımızda .Net Compact Framework 3.5 ile birlikte “artık” desteklenen, mobil cihaz uygulama geliştiricilerin bu platform üzerinde kullanabilecekleri LINQ implemantasyonundan bahsedeceğiz.
.Net Compact Framework 3.5 ile artık masaüstü LINQ’ in “kısıtlı, belirli bir bölümünü” mobil cihaz uygulamaları geliştirirken kullanabilmekteyiz. .Net Compact Framework 3.5 üzerinde sadece ;

Standart Query Operators
LINQ To Dataset
LINQ To XML

desteklenmektedir.

Standart Query Operators
Yazımızın bir önceki bölümünde bahsettiğimiz üzere LINQ içerisinde Standart Query Operators başlığı altında IEnumerable arayüzü için hazırlanmış bir dizi extension method bulunmaktadır. Bu methodlar genel olarak “veri üzerinde standart işlemler” olarak tâbir ettiğimiz arama, sayma, filtreleme, seçme v.b. gibi işlemleri gerçekleştirmeye yarayan method’ lardır. Method’ ların tek tek kullanımını bu noktada belirtmek çok mantıksız olur. Belirli amaçlara yönelik birkaç method’ un kullanımından bahsetmek, diğerlerinin öğrenilmesine yol açmak şahsen daha mantıklı olacaktır. :)

Hiç vakit kaybetmeden birkaç örnek üzerine çalışalım. Örneğimizde Sql Server Compact Edition 3.5 sürümü üzerinde hazırlanmış Northwind.sdf isimli veritabanı üzerinden Customers tablosuna ait veriler çekiliyor ve çekilen her satır uygulama içerisinde bir Customer entity instance’ ı olarak temsil ediliyor. Bu noktada hazırlanan alt yapıyı örnek kodları indirerek inceleyebilirsiniz.



Entity klasörü içerisindeki Customer sınıfı, veritabanı üzerindeki bir Customer kaydını temsil edecek şekilde modellenmiştir.



Business klasörü içerisindeki Customer sınıfı ise Northwind.sdf üzerinden tüm müşteri kayıtlarını Ilist tipinde döndürmeye yarayacak bir fonksiyona sahiptir.



Bu noktada kodların tamamına örnek kodları indirerek ulaşabilirsiniz. Verilerin getirilmesinde SqlCe Provider’ ı kullanışmıştır.

Sıra geldi bu verileri çekip, üzerinde sorgulama yapmaya. Bu noktada bize yardımcı olması adına uygulamamıza bir Form ekliyoruz ve Form Load olayı tetiklendiğinde aşağıdaki kod bloğunu çalıştırıyoruz.



Ve verilerimiz artık elimizde. Bu noktadan sonra elimizdeki Customers list’ i üzerinde Standart Query Operators ‘ ı kullanarak birçok işlem gerçekleştirebiliriz. Sonucta IList arayüzü içeriğine bakıldığında IEnumerable arayüzünden kalıtım almaktadır. Dolayısıyla IEnumerable için hazırlanmış tüm Extension Method’ lar IList içinde geçerlidir.
Form üzerine bir button yerleştirip bu button’ a tıkladığımızda açılan kod bloğu içerisinde Customers yazıp noktaya basıyoruz ve gerçekleştirebilecek olduğumuz işlemlerin bir listesini görüntülüyoruz.



İşte karşımızda Extension Method’ lar ya da bir diğer deyimiyle Standart Query Operators ! İkonunda aşağı doğru bakan mavi renkli ok işaratei bulunanlar Extension Method olarak ifade edilebilir.

Sıra geldi bu fonksiyonların etinden sütünden faydalanmaya. Bilindiği üzere LINQ üzerinde iki tip sorgulama yöntemi bulunmaktadır. Query Expressions ve Method Calls. Siz, bazı operatörleri method çağrıları şeklinde çağırmak yerine LINQ’ in “doğal yöntemi” ile sorgulayabilirsiniz. Bunu yazımızın başında ifade etmiştik.

Query Expression modelinde hangi keyword’ lerin kullanılabileceğini ise
http://msdn.microsoft.com/en-us/library/bb882642.aspx adresinden inceleyebilir, yazdığınız kelimelerin compile time’ da hangi method çağrılarına dönüştürüldüğünü, hangilerini sadece methodlar kullanarak çağırabileceğinizi bu listeden görebilirsiniz. Ayrıca C#’ ta olmayan bazı keyword’ ler VB.Net üzerinde bulunmaktadır. J Microsoft’ un önerisi, okunması her açıdan kolay olan Query Expression’ ları olabildiğince kullanmamızdır. Sonuçta compile time’ da her ikiside aynı IL koduna dönüştürüldüğünden aralarında hiç bir performans farkı bulunmamaktadır. Ayrıca bilindiği üzere Query Expression’ lar çok sınırlı bir keyword listesini desteklemekte. Siz sıkıştığınız noktalarda bu expressionları method çağrıları ile birleştirip hibrit sorgulamalar gerçekleştirebilirsiniz. Örneğin ;



Yukarıdaki kod bloğunda Berlin şehrinde yaşayan müşterilerimizin ContactTitle bilgisini seçtikten sonra normal şartlarda C# üzerinden Query Expression yöntemi ile gerçekleştirilemeyen Distinct çağrısını Extension Method çağrısı ile gerçekleştirmiş bulunmaktayız.

Biraz sorgulama gerçekleştirelim.



Sorguda veri kaynağı üzerinden gelen müşterileri yaşadıkları ülkelere göre grupladık. Gruplamanın sonucunda ise anonim bir tip oluşturduk ve bu tipe 2 adet özellik tanımladık. Hangi şehir bilgisi ve bu şehirde yaşayan müşterilerin sayısı.



Örneğin yukarıdaki sorguda Adres’ i A harfiyle başlayan müşterileri listeledik.

Kısacası elinizdeki verilerin yoğunluğu, aralarındaki ilişkiler ve daha birçok noktayı da göz önünde bulundurarak, .Net Compact Framework 3.5 kullanarak geliştirdiğiniz Mobil Cihaz Uygulamalarında Standart Query Operators olarak ifade edilen bu keyword ve fonksiyonları kullanarak LINQ’ in gücünü hissedebilirsiniz. Bir sonraki yazımızda .Net Compact Framework üzerinde LINQ To Dataset kavramını örneklerle inceleyeceğiz.

Geliştirilen örnek uygulamanın kodlarını buradan indirebilirsiniz.

Devamını Oku...

12 Ağustos 2009

LINQPad

Merhaba,

Birkaç gün içerisinde .Net Compact Framework 3.5 üzerinde LINQ uygulamaları ile ilgili bir yazı yayınlayacağım. Bu süreçte birkaç noktayı araştırırken karşıma çıkan "faydalı" bir ürünü sizlerle paylaşmak istiyorum ; "LINQPad"

LINQPad, isminden de anlaşılabileceği üzere hızlı ve kolay bir şekilde LINQ sorguları yazmak, projelerinde LINQ kullanmak isteyen uygulama geliştiricilerin hayatlarını ciddi anlamda kolaylaştırıyor. Uygulama üzerinden veritabanlarınıza bağlanabiliyor olmanızda aslında işin ayrı bir avantajı.



Uygulamayı "belirli özellikleri ile ücretsiz olarak" http://www.linqpad.net/ adresinden indirebilirsiniz.

Devamını Oku...

11 Ağustos 2009

Microsoft Yaz Okulu 2009 | Ankara

Merhaba,

11 Ağustos 2009 tarihinde 1 tam günlük Microsoft Yaz Okulu 2009 eğitimi için Ankaradaydım. Hedefimiz ;

  • Cep Bilgisayarları
  • Windows Mobile 6.0 - 6.1 - 6.5
  • Windows Mobile Mobil Cihaz Uygulamaları
  • .net Compact Framework 3.5
  • Sql Server Compact Edition 3.5
ürün ve teknolojileri hakkında "vaktimiz elverdiğince" kapsamlı "tam günlük" bir eğitimdi. Her ne kadar vakit tam olarak yetmesede keyifli, öğretici ve örnekli bir gün geçirdik. Özellikle sabah derse erken başlamamız, öğrencilerin çok garibine gitti :)



Bolca konuştuk, mobil cihazlar ve mobil cihaz uygulamalarını geliştirmek adına teknolojilerden bahsettik. Ve tabiki öğlen güzel bir yemek yedik ;



Kısacası keyifli bir gündü. Diğer seminerlerde görüşmek dileğiyle. Geliştirdiğimiz fakat tamamlayamadığımız örnek uygulamanın kodlarını bu adres üzerinden paylaşıyor olacağım. Uçağa yetişmem gerekiyor. :)

Edit : En sonunda dosyayı sunucuya yükledim. :) Buraya ! tıklayarak geliştirilen uygulamayı indirebilirsiniz.

Devamını Oku...

8 Ağustos 2009

ASP.NET Mobile & Visual Studio 2008

Merhaba,

Uğraşanlar farkedecektir, önceki sürümlerinde standart bir ASP.NET Web projesi oluşturduğumuzda "Mobile Web Form" olarak ifade edilen mobil cihaz uyumlu Web Form' ları ekleyip, hazırlayabilmekteyiz.

Fakat Visual Studio 2008 "Add New Item" dialog penceresinde gördüğümüz üzere bu özellik Visual Studio 2008 üzerinden "nedense" çıkarılmıştır. Alınan bazı duyumlara göre mobil cihazların farklı Form Factor' lerinin olması bu sonucu oluşmasında büyük rol oynarken kimilerine göre de bu tip bir çalışma için "uğraşılmamış".

Visual Studio 2008 ASP.NET Mobile uygulama modelini halen desteklemektedir. Sadece Designer View olarak tabir edilen "Görsel Tasarım" ekranı bulunmamaktadır.




Peki, biz bir Mobile Web Form' u projemize nasıl dahil edebilmekteyiz ?

Bu işi gerçekleştirmenin iki farklı yöntemi bulunmaktadır.

Yöntem 1 :

Varolan bir Web Form' u Page yerine MobilePage' ten kalıtım aldırmak. Kullanacak olduğumuz kontrolleri ise UserControl yerine MobileUserControl' den kalıtım aldırmak. Ve son olarak sayfa üzerine ;


tanımlamasını yerleştirerek "Source View" üzerinden mobile kontrollere erişmek.

Yöntem 2 :

Visual Web Developer Group Program Manager Omar Khan tam ihtiyacımız olan bir Visual Studio template' i hazırlamış. http://blogs.msdn.com/webdevtools/attachment/4776222.ashx adresinden indirilebilecek bu template ile birinci yöntemde ifade edilen adımları otomatize edebilir, Add New Item penceresine kaybolan Mobile Web Form' u geri getirebilirsiniz.




Yanlız ifade ettiğim üzere, Designer View olarak ifade edilen tasarım ekranı ASP.NET Mobile kontrollerini görüntüleyemediğinden bu özellik çıkarılmış, sadece Source View desteklenmektedir.

Devamını Oku...

6 Ağustos 2009

Windows 7 Sürümleri Türkiye Fiyatları



Microsoft’un bütün dünyada 22 Ekim 2009 tarihi itibarıyla tüketiciyle buluşacak yeni işletim sistemi Windows 7’nin farklı sürümleri için, Türkiye’de önerilen (kutu ürünler için) son kullanıcı liste fiyatları belirlendi. Paralel olarak PC üreticileri ile birlikte OEM Güncelleme Garantisi Programını başlattı.

Home Basic 123.00 US$
Home Premium
145.00 US$
Professional
236.00 US$
Ultimate 250.00 US$

Daha detaylı bilgi için ; http://www.microsoft.com/turkiye/haberler/win7.mspx

Ayrıca, Windows 7' nin yeniliklerini incelemek isteyenler için ;


http://www.microsoft.com/turkiye/windows/windows-7

Bu arada MSDN üyeleri için, bugün (6 Ağustos 2009) MSDN üzerinde Windows 7 RTM yayınlanacaktır. Bilginize :)

Devamını Oku...

4 Ağustos 2009

Webiner Tekrarı ! | Windows Mobile 6.5 – Widget Geliştirmek Part 1

Arkadaşlar merhaba,

04 Ağustos 2009 ' ta gerçekleştirdiğimiz Windows Mobile 6.5 – Widget Geliştirmek Part 1 konulu webiner bağlantı problemlerinden dolayı maalesef tamamlanamadı. Webiner' in tekrarını yapacağız. Katılan arkadaşlara çok teşekkür ediyorum.

Yeni webiner gün / saatini mail grubu ve blog' um üzerinden paylaşacağım.

Teşekkürler,

Devamını Oku...

2 Ağustos 2009

Windows Mobile Türkiye - Mail Grubu

Merhaba, Paylaşımın artması ve Türkiyedeki Mobil Cihaz uygulama geliştirici sayısının yükselmesi adına bir mail grubu kurdum ; Windows Mobile Türkiye !



Mail grubu genel olarak ;

  • Windows Mobile
  • .Net Compact Framework
  • Visual Studio
kavramları üzerine sorular, sorunlar, paylaşımlar ve örneklerin olacağı, tartışılacağı ve konuşulacağı bir ortam olacaktır. İlgi duyan herkesi Live ID' si ile birlikte ;

http://windowsmobileturkiye.groups.live.com


adresi üzerinden gruba katılımını bekliyorum. :)

Devamını Oku...