LINQ deyince eminim pek çoğumuzun aklına T-SQL’e benzeyen sorgular gelmektedir ve bu da doğrudur. Adından da anlaşılacağı gibi LINQ (Language Integrated Query) yani dil ile tümleştirilmiş sorgu anlamına gelmektedir. Fakat bugün sizlerle LINQ’e farklı bir açıdan bakacağız. Örneğin LINQ’i aşağıdaki gibi convert işlemlerimizde de kullanabiliriz:

string[] strNums = { "78", "23", "35", "6", "67" };

int[] numbers = strNums.Select(p => int.Parse(p)).ToArray();

Gördüğünüz gibi örnekte LINQ’i convert işlemi için kullandık. İsterseniz biraz daha kompleks bir örnek yapalım. Diyelim ki bir Employee sınıfımız olsun ve sınıfımızda bu sınıfın bir nesne listesini döndüren bir de static bir metodu olsun. Bunun dışında bir de Contact sınıfımız olsun. Bu sınıfımızda çalışanların adı ve iletişim bilgisini temsil etmek için propertyler ve kontaktları ekrana yazdırmak için static bir metodumuz bulunmaktadır.   

public class Employee
    {
        public int ID { get; set; }

        public string Name { get; set; }

        public string Surname { get; set; }

        public double Salary { get; set; }

        public static ArrayList GetEmployee()
        {
            ArrayList al = new ArrayList();
            al.Add(new Employee
            {
                ID=1,
                Name="Ali",
                Surname="Köken",
                Salary=5000
            });

            al.Add(new Employee
            {
                ID = 2,
                Name = "Mischa",
                Surname = "Barton",
                Salary = 15000
            });

            al.Add(new Employee
            {
                ID = 3,
                Name = "Jonathan",
                Surname = "Jones",
                Salary = 9000
            });
            return al;
        }
    }

    public class Contact
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public static void PublishContact(Contact[] contacts)
        {
            foreach (var contact in contacts)
            {
                Console.WriteLine("Contact ID:{0} Contact Name:{1}",
               contact.Id,contact.Name);
            }
        }
    }

Burada tam olarak yapacağımız işlemler öncelikle  Employee nesnelerinin saklandığı diziyi IEnumerable<Employee> ‘e  Cast operatörü kullanarak cast etmemiz gerekir. Çünkü ArrayList’de System.Object sınıf tipleri saklanabilmektedir, Employee sınıf tipinin nesneleri saklanmamaktadır. Eğer Employee sınıfımızdaki metodun geri dönüş tipi Employee tipinden generic liste olsaydı bu cast işlemini yapmamıza gerek yoktu.

Daha sonra IEnumarable’daki Employee nesnelerinde select operatörünü çağırararak iterasyon yapacağız. Burada lambda ifadesi ve C#’ın object initializer özelliğini kullanarak Employee nesnelerini kullanarak yeni bir Contact nesnesi oluşturmalıyız. Son olarak da oluşturduğumuz  yeni Contact nesnelerimizi Contact dizisine atmak için aşağıdaki gibi ToArray() metodunu kullanmalıyız : 

ArrayList al = Employee.GetEmployee();
  Contact[] contacts = al.Cast<Employee>().Select(p => new Contact 
  { 
   Id = p.ID, 
   Name = p.Name 
  }).ToArray<Contact>();

  Contact.PublishContact(contacts);

Bu bir kaç satır kod sayesinde LINQ’i başka emellerimize alet ederek Employee sınıfımızı Contact sınıfına convert etmiş oldukJÖrnek uygulamayı aşağıdan indirebilirsiniz.

Kolay gelsin.

LINQtoMe.rar (26,86 kb)

About the Author