چه تکنولوژی می‌خواهید یاد بگیرید؟

نظرات و انتقادات خود را با ما در میان بگذارید

آپدیت روزانه

بیش از 1500 مطلب آموزشی

نیازهای روز

راه‌های متفاوت تبدیل DataTable به Generic List

در این مقاله قصد داریم با استفاده از روش‌های متفاوت شی DataTable رو به شی Generic List تبدیل کنیم.

تکنیک‌های مورد استفاده در این مقاله:

  1. استفاده از حلقه for
  2. استفاده از دستور Linq
  3. استفاده از متدهای Generic

برای مثال این پست کلاس زیر ایجاد شده است:

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

و DataTable زیر به همراه اطلاعات پیشفرض:

private static System.Data.DataTable LoadDataTable()
{
    System.Data.DataTable dt = new System.Data.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, "Ali", "Hyderabad", "0000000000");
    dt.Rows.Add(2, "Vahid", "Hyderabad", "111111111");
    dt.Rows.Add(3, "sadar", "Pune", "1222222222");
    dt.Rows.Add(4, "servan", "Bhagalpur", "3333333333");
    return dt;
}

با استفاده از Class و DataTable تعریفی، قصد داریم با استفاده از سه روش مذکور عمل تبدیل DataTable به شی  Generic List بپردازیم.

استفاده از حلقه for:

در مثال زیر از حلقه for برای عمل تبدیل DataTable استفاده کرده‌ایم:

private static void Main(string[] args)
{
    var studentList = new List<Student>();
    var dt = LoadDataTable();

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

استفاده از دستور Linq:

استفاده از Linq یکی دیگر ار راه حل‌های تبدیل DataTable به Generic List می‌باشد:

private static void Main(string[] args)
{
    var dt = LoadDataTable();
    var result = (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();
}

استفاده از متد جنریک:

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); 

امید نصری

0 نظر:

تعداد دیدگاه‌های کاربران : 0 دیدگاه
مهمان گرامی! برای ارسال نظر نیاز است وارد سایت شوید.


You must log on to comment.