June 10, 2008
@ 04:09 PM

let ifadesi linq ile sorgulama yaparken değişken tanımlamayı sağlar. Örneğin aşağıdaki gibi bir sorguya ekleme yapacak olursak ;

IEnumerable<string> sonuc = (from a in isimler where (a.StartsWith("B"))

select a

);

foreach (string s in sonuc)

{

Console.WriteLine(s);

}

Bu sorgu içerisinde (her ne kadar da böyle yapılmaması gereksede örnek olsun diye yapıyorum) isimlerin başına "Sayın" ifadesi eklemek istersek ve değişken kullanıcaz diye tutturursak :) let ifadesi kullanmak gerekir.

IEnumerable<string> sonuc = (from a in isimler where (a.StartsWith("B"))

let abc = "Sayın "

select abc + a

);

foreach (string s in sonuc)

{

Console.WriteLine(s);

}

 


 
Categories: .Net | Csharp | Linq

OrderBy sql server'dan bildiğimiz süzme işlemini yapmaktadır. OrderByDescending ise tersten süzme işlemi yapmaktadır.

ThenBy kelimesi ise orderby içerisinde kullanılan 2.cil kriterleri temsil eder. Daha açıklayıcı bir deyişle Sql Server üzerinden bildiğimiz Order By Deneme, Deneme2  cümlesindeki Deneme2'yi temsil etmektedir. Örnekleri aşağıda bulabilirsiniz.

            static string[] isimler = new string[] {"Okan","Yalçın", "Bora","Güneş","Boran","Ekin","Hızır" };

            static void OrderByMetodu()

            {

            IEnumerable<string> sonuc = from r in isimler orderby r select r;

            foreach (string s in sonuc)

            {

            Console.WriteLine(s);

            }

            }

            static void OrderByDescendingMetodu()

            {

            IEnumerable<string> sonuc = from r in isimler orderby r descending select r;

            foreach (string s in sonuc)

            {

            Console.WriteLine(s);

            }

            }

            static List<Musteri> musteriListesi = new List<Musteri>() {new Musteri{Ad="Bora", Soyad="Burgucugil"}, new Musteri{Ad="Bora", Soyad="Beken"} };

 

 

            static void ThenByMetodu()

            {

 

      

 

               var sonuc = musteriListesi.OrderBy(a => a.Ad).ThenBy(a => a.Soyad);

 

               foreach (Musteri m in sonuc)

               {

                   Console.WriteLine(m.Ad + " " + m.Soyad);

               }

              

           }

 

            static void ThenByDescendingMetodu()

            {

 

                var sonuc = musteriListesi.OrderBy(a => a.Ad).ThenByDescending(a => a.Soyad);

 

               foreach (Musteri m in sonuc)

               {

                   Console.WriteLine(m.Ad + " " +  m.Soyad);

               }

            }


 
Categories: .Net | Csharp | Linq

June 10, 2008
@ 03:14 PM

Select metodu bir koleksiyondan veya diziden verileri listelemeyi, seçmeyi sağlar. SelectMany metodu ile arasında fark select keyword'u sadece tek boyutlu kaynak üzerinden çalışır.

static string[] isimler = new string[] {"Okan","Yalçın", "Bora","Güneş","Boran","Ekin","Hızır" };

IEnumerable<string> sonuc = from a in isimler where (a.StartsWith("B")) select a;

foreach (string s in sonuc)

{

Console.WriteLine(s);

}

SelectMany ise birden fazla boyutu olan kompleks olan koleksiyonlar için kullanılır. Örneğin :

public class Musteri

{

public string Ad { get; set; }

public List<string> Kitaplar {get;set;}

}

Sorgulama yapmak için :  

Musteri[] bilgiler ={new Musteri { Ad = "Okan ",Kitaplar = new List<string>{"Sql Server", @"C#"}},

new Musteri { Ad = "Ekin ",Kitaplar = new List<string>{"Mobile Applications", "Linq"}},

new Musteri { Ad = "Yalçın, Kitaplar = new List<string>{"Sigara Bırakma Yöntemleri", "Rakı içme Teknikleri"}}};

IEnumerable<string> sonuc = bilgiler.SelectMany(a=> a.Kitaplar);

foreach (string s in sonuc)

{

Console.WriteLine(s);

}


 
Categories: .Net | Csharp | Linq

June 10, 2008
@ 02:41 PM

C# 3.5 ile gelen extension metotlardan olan Union metodu verilen 2 kaynağı birleştirmeyi sağlar. Bu birleşim sonucu her 2 koleksiyondaki ortak elemanlar tekrarlanmaz farkı elemanlar listelenir. Örneğin :

int[] sayilar = new int[] { 1, 567, 34556, 487, 3, 5, 15, 7, 9 };

int[] sayilar2 = new int[]{3,7,9,1,12312365,17};

IEnumerable<int> sonuc = sayilar.Union(sayilar2);

foreach (int i in sonuc)

{

Console.WriteLine(i);

}

Bu çıktı sonucunda sayilar2 dizisindeki bazı sayılar ilk dizide de olduğu için ekranda gösterilmediği görülmektedir.


 
Categories: .Net | Csharp | Linq

June 10, 2008
@ 12:50 PM

Artık Linq ile Xml belgeleri üzerinde çalışmak oldukça kolaylaştı. Örneğin :

XElement dosyam = XElement.Load(@"C:\\Calisanlar.xml");

dosyam.Add(new XElement("Kisi", new XElement("Ad", "Okan"), new XElement("Soyad", "Tekeli")));

dosyam.Add(new XElement("Kisi", new XElement("Ad", "Yalçın"), new XElement("Soyad", "Uzun")));

dosyam.Add(new XElement("Kisi", new XElement("Ad", "Mahir"), new XElement("Soyad", "Gündüz")));

dosyam.Save(@"C:\\Calisanlar.xml");

Eğer Attribute eklemek isterseniz :

XElement dosyam = XElement.Load(@"C:\\Calisanlar.xml");

dosyam.Add(

new XElement("Kisi",

new XElement(

"Ad",

"Okan",

new XAttribute("Id",1)),

new XElement("Soyad", "Tekeli")));

dosyam.Add(new XElement("Kisi", new XElement("Ad", "Yalçın"), new XElement("Soyad", "Uzun")));

dosyam.Add(new XElement("Kisi", new XElement("Ad", "Mahir"), new XElement("Soyad", "Gündüz")));

dosyam.Save(@"C:\\Calisanlar.xml");


 
Categories: .Net | Csharp | Linq

Sadece entity katmanı sayesinde veritabanı üzerine işlem yapabilmek için DataContext sınıfı size yardımcı olacaktır. Yalnız entity üzerine attribute ile çalışmak gerekiyor. Örnek bir kullanım için aşağıdaki kodu inceleyebilirsiniz.

[Table(Name="Person.Contact")]

public class Contact

{

[Column(Name="FirstName")]

public string FirstName { get; set; }

[Column(Name = "LastName")]

public string LastName { get; set; }

}

Verileri görüntülemek için kısa yoldan herhangi bir ek katman veya sorgu yazmadan :

DataContext dt = new DataContext("server=.;database=AdventureWorks;uid=sa;pwd=**");

Table<Contact> ct = dt.GetTable<Contact>();

var result = from c in ct where c.FirstName select new { c.FirstName, c.LastName };


 
Categories: .Net | Csharp | Linq

June 5, 2008
@ 11:04 AM

To help drive adoption of SharePoint by Software Developers, MS has launched a campaign to .NET Developers at http://MSSharePointDeveloper.com.

The new material is designed to help .NET Developers to learn the top ten artefacts in SharePoint that are interesting to them. They have created a variety of materials with different learning styles to make getting started with these artefacts easy and it’s all based on the Visual Studio extensions for SharePoint – planned to release v1.2 for Visual Studio 2008 this week also (watch for their announce).

 

The Top Ten SharePoint Artifacts of interest to .NET Developers being promoted

·         Web Parts

·         Data Lists

·         Event Handlers

·         Workflows

·         Silverlight Web Parts

·         Page Navigation

·         Page Branding

·         Web Services

·         Content Types

·         User Management

 

At the site (which is hosted on microsoft.com) they have:

·         An Introductory Whitepaper

·         Benefits of SharePoint for Developers

·         A Small Public VPC

·         Hosted MSDN Virtual Labs in C# and VB.NET

·         Video Interview with SharePoint MVPs

·         Screencasts

·         Web Casts with SharePoint MVPs (incredible 1705 live attendees in just the first four WebCasts)

·         Quickstarts

·         Labcasts

·         Presentation Download

·         Hands on Labs Download

·         Additional Resource Links

 

The site encourages developers who use the content to also take a next step and go on Instructor Led Training, Get Certified, and Download an evaluation copy of Microsoft Office SharePoint Server.

 

http://MSSharePointDeveloper.com

 


 
Categories: Sharepoint

Generic sınıflar ile birlikte default kullanmak oldukça kullanışlı olacaktır. Şöyleki, 400 sutunlu bir tablo üzerinde çalışıyorsunuz ve bu sutunlardan yaklaşık olarak 200'ü NULL veri içeriyor.  Tabloda 100.000 kayıt var ve siz bunları DataReader ile okumak istediniz. SqlCommand ile okuma yaparken sizin hata almamanız için IsDBNull kontrolü yapmanız gerekiyor her satır için. Daha az yazmak için ise biraz reflection'dan yararlanıp tek bir static metot sayesinde bu sorunu giderebilirsiniz. Eğer verimiz null ise o tipin default değerini almak için aşağıdaki gibi bir örnek yapabiliriz.

public static T GetMyValue(SqlDataReader rdr, String column)

        {

            Type type = typeof(T);

            Assembly asm = type.Assembly;

            object obj = asm.CreateInstance(asm.FullName);

            obj = Activator.CreateInstance<T>();

 

            T value = (rdr.IsDBNull(rdr.GetOrdinal(column))) ? (T)obj : (T)rdr[column];

            return value;

        }

Databaseden okuma yaparken ise :

nesne.Özellik = Class<int>.GetMyValue(rdr, "Sutun");

şeklinde bir okuma yaparsanız sorun ortadan kalkar. Yazdığınız static metot sayesinde artık her satırda IsDBNull kontrolü yapmanıza gerek kalmaz. Bu metot sayesinde artık eğer veri null ise size null değil tipin default değeri döner. Bunun daha da kısa yolu nedir diye sorarsanız default kelimesini kullanmaktır.  Şöyleki :

public class IslemYap<T>

{

static T veri = default(T);

public static T DegerOku()

{

return veri;

}

}

Artık reflection da kullanmadan sadece default kelimesinin nimetlerinden yararlanarak bu işlemi kısaca yapabilirsiniz.

DateTime z = IslemYap<DateTime>.DegerOku();

Default kelimesi Generic class ile birlikte kullanıldığında size tipin default değerini döndürmektedir.


 
Categories: .Net | Csharp

Virtual Earth ile istanbul haritasını başlangıçta göstermek isterseniz javascript metodunuzda LoadMap metodunu aşağıdaki gibi değiştimeniz yeterli.

var harita = null;

function haritaYukle()

{

harita = new VEMap("harita");

harita.LoadMap(new VELatLong(41.0484176, 28.9989280,0000000009), 10 ,'h' ,false);

}

Not: 41.0484176, 28.9989280,0000000009 İstanbul'un koordinat bilgisidir.


 
May 20, 2008
@ 02:07 PM

Refactoring işlemi kodlama üzerinde oldukça sık yapılan ve hayat kurtarabilen bir yapıdır. Refactoring işlemini ise Sql Server üzerinde yapmak için

Microsoft® Visual Studio Team System 2008 Database Edition Power Tools

aracını indirin. Bu aracı indirdikten sonra artık Visual Studio sayesinde veritabanlarınız üzerinde refactoring işlemi yapabilirsiniz ? Peki Nasıl ?

Yeni bir Sql Server 2005 Wizard projesi oluşturun.

Projeyi oluşturduktan sonra karşınıza sizi bir sihirbaz karşılayacak. Bu sihirbaz sayesinde projenizi özelleştirebilirsiniz. Yalnız burada birkaç önemli nokta var. Bunlardan ilki  Project Properties adımından Organize My project by schema seçeneğini seçmeniz ve Import Database Schema adımından ise çalıştığını database'i seçmenizdir. Eğer database seçmezseniz yeni bir database projesi oluşturacak, seçerseniz mevcut database üzerinde çalışacaksınız.

Schema View penceresinden üzerinde çalışmak istediğiniz veritabanı nesnelerini artık rahatça yönetebilirsiniz. Nesnenin üzerinde sağ tıklayıp refactor menüsü içerisinden farklı işlemler yapabilirsiniz. Bu işlemin güzel bir yanı örneğin bir tablo üzerinde yeniden isimlendirme işlemi yapmak isterseniz gerekli function, sp gibi nesnelerdeki isimlerde rename yapılıyor ve işleminizi başarılı bir şekilde sonlandırıyorsunuz.

Daha sonra yapılacak işlemler için Preview seçeneğini işaretleyerek yapılacak işlemlerinin tümünü görebilirsiniz.

 

İşleminiz tamamlandıktan sonra test edip kullanabilirsiniz. Örneğin ben bu örnek içerisinde DatabaseLog tablosunun ismini VeritabaniLog olarak değiştirdim. Sql Server Management Studio ile bu işlemi yapsaydık sadece tablo ismi değişecekti fakat Power Tool kurulumu sonrası bu tablonun kullanıldığı her nesne değiştirildi. Örneğin ddlDatabaseTriggerLog trigger'ı içerisindeki Insert cümleciğinde değişiklik yapıldı.

CREATE TRIGGER [ddlDatabaseTriggerLog]

ON DATABASE

FOR DDL_DATABASE_LEVEL_EVENTS

AS

BEGIN

SET NOCOUNT ON;

DECLARE @data XML;

DECLARE @schema sysname;

DECLARE @object sysname;

DECLARE @eventType sysname;

SET @data = EVENTDATA();

SET @eventType = @data.value('(/EVENT_INSTANCE/EventType)[1]', 'sysname');

SET @schema = @data.value('(/EVENT_INSTANCE/SchemaName)[1]', 'sysname');

SET @object = @data.value('(/EVENT_INSTANCE/ObjectName)[1]', 'sysname')

IF @object IS NOT NULL

PRINT ' ' + @eventType + ' - ' + @schema + '.' + @object;

ELSE

PRINT ' ' + @eventType + ' - ' + @schema;

IF @eventType IS NULL

PRINT CONVERT(nvarchar(max), @data);

INSERT [dbo].[VeritabaniLog]

(

[PostTime],

[DatabaseUser],

[Event],

[Schema],

[Object],

[TSQL],

[XmlEvent]

)

VALUES

(

GETDATE(),

CONVERT(sysname, CURRENT_USER),

@eventType,

CONVERT(sysname, @schema),

CONVERT(sysname, @object),

@data.value('(/EVENT_INSTANCE/TSQLCommand)[1]', 'nvarchar(max)'),

@data

);

END;


 
Categories: Sql Server | Team System

WPF uygulamalarınızda runtime'da FlowDocumentPageViewer kontrolüne paragraf eklemek isterseniz önce döküman ekleyip daha sonra eklenen dökümana paragrafı ekleyebilirsiniz.

Paragraph p = new Paragraph();

p.Inlines.Add("yazi");

FlowDocument flw = new FlowDocument();

flw.Blocks.Add(p);

YaziAlani.Document = flw;

Not : Yukarıda YaziAlani olarak belirtilen FlowDocumentPageViewer kontrolünün x:Name özelliğidir.


 
Categories: .Net | Csharp

Kendi kişisel web sayfalarınızdan windows live messenger'ınıza mesaj iletilmesini, durumunuzun siteniz üzerinde görüntülenmesini, yani sitenizi ziyaret eden kişilerin anlık olarak sizinle irtibata geçmesini istiyosanız ilk önce

http://settings.messenger.live.com/applications/WebSettings.aspx

adresini ziyaret edip "Web sitelerinin Messenger durumunuzu görmesine ve size ileti göndermesine izin verin " sekmesini seçin.

Daha sonra yine aynı sayfa üzerinde sol tarafta Html Oluştur linkine tıklayarak durumunuzun nasıl görüneceği ait resmi seçin. Özellştirmeleri yapın. Alt tarafa size verilen kodu sayfanıza ekleyin.Sitenize ekleme yaptıktan sonra eğer durumunuz offline değil ise internet sitenizde sohbet etmek işlemi aktif hale gelecek ve artık ziyaretçileriniz sizinle anlık sohbet yapabilecek, yazdıklarınızı tartışabilecek , soru sorabilecek.

İletişime geçtiği anda kullanıcıya anonim olarak mı görüşmek başlatmak istediği yoksa oturum açarak mı sohbet etmek istediği sorulacak.

Kullanıcı seçimini yaptıktan sonra güvenlik resmi ile doğrulama yapılacak ve sohbet başlayacak.


 

http://www.microsoft.com/downloads/details.aspx?FamilyID=cf99c752-1391-4bc3-babc-86bc0b9e8e5a&DisplayLang=en

This download installs Visual Studio 2008 SP1 Beta. Visual Studio 2008 SP1 includes support for SQL Server 2008, new ADO.NET features such as the Entity Framework, improvements to the WPF designers, WCF templates for Silverlight projects, debugger support for the .NET Framework public symbols and source release, control improvements such as the DataRepeater for Windows Forms and Office 2007 Ribbons for C++, and several general updates for debugging and IntelliSense. SP1 also enhances the stability, performance, and security of many features.

The included .NET Framework 3.5 Service Pack 1 adds many new features and fixes, including the following:

.NET Framework Client Release (“Arrowhead”)

ASP.NET Dynamic Data

ASP.NET Routing

ADO.NET Data Services

ADO.NET Entity Framework


 
Categories: .Net

Web uygulamalarında bilindik en iyi harita hizmeti veren firmalar google ile microsoft. Özellikle Amerika için hizmetleri oldukça fazla. Bunlardan en önemlileri arasında ise güncel trafik bilgileri, nereden nereye hangi otobüs ile gidilebileceği gibi hizmetler var.  Bu makalede VirtualEarth ile web uygulamalarınızda(bir sonraki makalede windows uygulamalarında) nasıl harita kullanabileceğimizi anlatacağım.

Virtual Earth ile çalışabilmek için :

 <script type="text/javascript" src="http://dev.virtualearth.net/mapcontrol/mapcontrol.ashx?v=6.1"></script>

Scriptini kullanmak gerekiyor. Bu script sayesinde gerekli metotları çağırarak istediğimiz işlemleri yapabiliyoruz. En yalın hali ile harita görüntüleyebilmek için LoadMap() metodunu kullanmak gerekiyor. Bu metod özelleştirilmemiş hali ile size haritayı göstermeyi sağlıyor. Tabii bu metodu kullanmak için ise ile önce VEMAP sınıfının bir instance’ını almanız gerekiyor. Kullanmanız gereken javascript aşağıdadır :

<script type="text/javascript">

    var harita = null;

   

    function HaritaGetir()

    {

        harita = new VEMap("haritaDivID")

      

        // haritayı yükle

        harita.LoadMap();

            

    }

   

    </script>

Bundan sonra ise yapmanız gereken sadece bir div oluşturmak ve metodu çağırmak. Yukarıda haritaDivID isminde bir kontrol çağırıldı. Bu kontrol haritanın görüntüleneceği div kontrolüne vereceğimiz Id özelliğidir.

Gereken diğer kodlar ise aşağıdadır:

<body onload="HaritaGetir();" style="margin-left:0px;margin-top:0px;">

   

    <div id="haritaDivID" style="position:relative; width:1500px;height:1000px;">

   

   

    </div>

   

</body>

</html>

Çalışan örneği görmek için tıklayın.

En basit şekli ile haritamızı gösterdik. Gösterdiğimiz harita üzerinde şu anda istediğimiz bir yeri gösteremiyoruz çünkü arama özelliğini aktif hale getirmedik. Arama yapabilmek için LoadMap metodundan sonra ShowFindControl metodunu çalıştırmanız gerekiyor. Bir önceki javascript dosyasının güncellenmiş hali aşağıdadır:

<script type="text/javascript">

    var harita = null;

   

    function HaritaGetir()

    {

        harita = new VEMap("haritaDivID")

      

        // haritayı yükle

        harita.LoadMap();

       

         // Eğer haritada arama işleminin aktif olmasını istiyorsanız ShowFindControl() metodunu çağırın. Bu metod LoadMap metodundan sonra çağırılmalıdır

        harita.ShowFindControl();

       

               

    }

   

    </script>

 Artık gösterdiğiniz haritalar üzerinde arama işlemi yapabileceğiz. Çalışan örneğe ulaşmak için tıklayın.

Arama yapmak için kontrol kullanmak istemezseniz Find metodu size yardımcı olacaktır. Bu metot sizden 2 parametre isteyecek. Bunlardan ilki ne arayacağınız (what) ikincisi ise nerede(where) arayacağınızdır. Örneğin Find(“Lütfü Kırdar”, “istanbul”) gibi bir arama yapabilirsiniz. Haritanın kendi arama kontrolü kullanmak yerine kendi arama textbox kontrollerini kullanıp daha da özelleştirebilirsiniz arama işlemini. Güncellenmiş javascript dosyamız aşağıdadır:

   <script type="text/javascript">

    var harita = null;

   

    function HaritaGetir()

    {

        harita = new VEMap("haritaDivID")

      

        // haritayı yükle

        harita.LoadMap();

       

        harita.ShowFindControl();

       

        harita.Find("", "istanbul");

       

    }

   

    </script>

Bu örnek içerisinde hem arama kontrolü gösteriyoruz hemde İstanbul’u arıyoruz. Dolayısıyla haritamız açıldığında otomatik olarak İstanbul’u gösteriyor. (İlk başta Load metodunu çalıştırdığımız için standart harita görünecek daha sonra İstanbul’a yönlendirme yapılacak).

Çalışan örneğe ulaşmak için tıklayın.