C# DataTable’ı List’e Dönüştürme

Karaoz Onr
2 min readJul 2, 2024

--

Bu makalede, C#’ta bir DataTable’ı Listeye dönüştürmenin çeşitli yolları açıklanmaktadır. DataTable’ı Listeye dönüştürmenin aşağıdaki 3 yolu vardır.

Döngü Kullanmak.

LINQ’u kullanma.

Generic Method Kullanmak.

Student sınıfı oluşturuyorum:

public class Student
{
public int StudentId { get; set; }
public string StudentName { get; set; }
public string Address { get; set; }
public string MobileNo { get; set; }
}

DataTable içine veri ekleyelim.

DataTable dt = new DataTable("Student");
dt.Columns.Add("StudentId", typeof(Int32));
dt.Columns.Add("StudentName", typeof(string));
dt.Columns.Add("Address", typeof(string));
dt.Columns.Add("MobileNo", typeof(string));
//Data
dt.Rows.Add(1, "Onur", "Kara","0000000000");
dt.Rows.Add(2, "onur", "öz", "111111111");
dt.Rows.Add(3, "onur", "karaöz", "1222222222");
dt.Rows.Add(4, "onur", "kaz", "3333333333");

Şimdi önceki üç yöntemin tümünü kullanarak, geride kalan DataTable’ı List< Students >’a dönüştüreceğim.

Döngü Kullanarak DataTable’ı Listeye Dönüştürme

public void StudentList()
{

DataTable dt = new DataTable("Student");
dt.Columns.Add("StudentId", typeof(Int32));
dt.Columns.Add("StudentName", typeof(string));
dt.Columns.Add("Address", typeof(string));
dt.Columns.Add("MobileNo", typeof(string));
//Data
dt.Rows.Add(1, "Onur", "Kara","0000000000");
dt.Rows.Add(2, "onur", "öz", "111111111");
dt.Rows.Add(3, "onur", "karaöz", "1222222222");
dt.Rows.Add(4, "onur", "kaz", "3333333333");

List<Student> studentList = new List<Student>();
for (int i = 0; i < dt.Rows.Count; i++)
{
Student student = new Student();
student.StudentId = Convert .ToInt32 (dt.Rows[i]["StudentId"]);
student.StudentName = dt.Rows[i]["StudentName"].ToString();
student.Address = dt.Rows[i]["Address"].ToString();
student.MobileNo = dt.Rows[i]["MobileNo"].ToString();
studentList.Add(student);
}
}

Linq Kullanarak DataTable’ı Listeye Dönüştürme

public void StudentListUsingLink()
{
-
DataTable dt = new DataTable("Student");
dt.Columns.Add("StudentId", typeof(Int32));
dt.Columns.Add("StudentName", typeof(string));
dt.Columns.Add("Address", typeof(string));
dt.Columns.Add("MobileNo", typeof(string));
//Data
dt.Rows.Add(1, "Onur", "Kara","0000000000");
dt.Rows.Add(2, "onur", "öz", "111111111");
dt.Rows.Add(3, "onur", "karaöz", "1222222222");
dt.Rows.Add(4, "onur", "kaz", "3333333333");
List<Student> studentList = new List<Student>();
studentList = (from DataRow dr in dt.Rows
select new Student()
{
StudentId = Convert .ToInt32 (dr["StudentId"]),
StudentName = dr["StudentName"].ToString(),
Address = dr["Address"].ToString(),
MobileNo = dr["MobileNo"].ToString()
}).ToList();

}

Generic Method kullanarak DataTable’ı Listeye Dönüştürme

Bunu kullanın :)

private static List<T> ConvertDataTable<T>(DataTable dt)
{
List<T> data = new List<T>();
foreach (DataRow row in dt.Rows)
{
T item = GetItem<T>(row);
data.Add(item);
}
return data;
}
private static T GetItem<T>(DataRow dr)
{
Type temp = typeof(T);
T obj = Activator.CreateInstance<T>();

foreach (DataColumn column in dr.Table.Columns)
{
foreach (PropertyInfo pro in temp.GetProperties())
{
if (pro.Name == column.ColumnName)
pro.SetValue(obj, dr[column.ColumnName], null);
else
continue;
}
}
return obj;
}
List< Student > studentDetails = new List< Student >();
studentDetails = ConvertDataTable< Student >(dt);

--

--