Generic List üzerinde sorting işlemi

Framework 2.0 ile gelen System.Collections.Generic namespacesi altında bulunan Generic Listler kullanımı bakımından oldukça yaygınlaştı. Özellikle OOP yapısında Database tablelarının nesnelere map edilmesi işlemlerin bu nesneler üğzerinden kullanılması bize oldukça kolaylıklar sunmaktadır. Bu ay çıkacak olan Framework 3.5 deki Linq ile birlikte generic listler, arrayler vb. üzerinde rahatlıkla sorgu ve sıralama yapabileceğiz. Çok sık olarak elde ettiğimiz listler üzerinde sıralama, belli kayıtları bulma gibi işlemler gerçekleştirmemiz gerekiyor. Sıralama için bir örnek yapalım hemen.

Elimizde bazı kullanıcı bilgilerini(email, kullanıcı adı, şifre vs) tuttuğumuz bir USER isimli bir classımız olduğunu düşünelim:

public class User

{

private int id;
private string email;
private string username;
private string password;

public User()

 

{ }
public User(int id, string email, string username, string password)
{

this.id = id;
this
.email = email;
this
.username = username;
this
.password = password;
}

public int Id
{

get { return id; }
set { id = value; }
}
public string Email
{
get { return email; }
set { email = value; }
}
public string Username
{
get { return username; }
set { username = value; }
}
public string Password
{
get { return password; }
set { password = value; }
}
public override string ToString()
{
return string.Format(“{0}-{1}-{2}-{3}”, id, email, username, password);
}
}
Bu class için nesne listesini döndüren ve üzerinde sorting işlemlerini yapmamızı sağlayan UserManager adlı bir class oluşturuyoruz:

public class UserManager
{
public static List<User> GetUsers()
{
List<User> userList = new List<User>();
userList.Add(new User(1, “email@email.com”, “hakan”, “123″));
userList.Add(new User(2, “email2@email.com”, “uğur”, “1243″));
userList.Add(new User(3, “email@email.com”, “fatih”, “abc”));
userList.Add(new User(4, “email2@email.com”, “can”, “sss”));
return userList;
}
public static List<User> GetUsers(string sortData)
{
return Sorter(GetUsers(),sortData);
}
public static List<User> Sorter(List<User> tempList, string sortData)
{
if (string.IsNullOrEmpty(sortData))
{
sortData = “Id”;
}
string sortDataBase = sortData;
string descString = ” DESC”;
if (sortData.EndsWith(descString))
{
sortDataBase = sortData.Substring(0, sortData.Length - descString.Length);
}
Comparison<User> comparison = null;
switch (sortDataBase)
{
case “Id”:
comparison = new Comparison<User>(delegate(User lhs, User rhs)
{
return lhs.Id.CompareTo(rhs.Id);
}
);
break;
case “Email”:
comparison = new Comparison<User>(delegate(User lhs, User rhs)
{
return lhs.Email.CompareTo(rhs.Email);
}
);
break;
case “Password”:
comparison = new Comparison<User>(delegate(User lhs, User rhs)
{
return
lhs.Password.CompareTo(rhs.Password);
}
);
break;
case “Username”:
comparison = new Comparison<User>(delegate(User lhs, User rhs)
{
return lhs.Username.CompareTo(rhs.Username);
}
);
break;
default:
comparison = new Comparison<User>(delegate(User lhs, User rhs)
{
return lhs.Id.CompareTo(rhs.Id);
}
);
break;
}
if
(sortData.EndsWith(“DESC”, StringComparison.OrdinalIgnoreCase))
{
tempList.Sort(comparison);
tempList.Reverse();
}
else
{
tempList.Sort(comparison);
}
return tempList;
}
}

 

artık istediğimiz gibi User tipinden listleri sort edebiliriz. örnek kullanım:

foreach (User myUser in UserManager.GetUsers(“Username DESC”))

 

{
Console.WriteLine(myUser.ToString());
}


örnek kodlar


Yorum yaz