คุณแปลง DataTable เป็นรายการทั่วไปได้อย่างไร


185

ขณะนี้ฉันกำลังใช้:

DataTable dt = CreateDataTableInSomeWay();

List<DataRow> list = new List<DataRow>(); 
foreach (DataRow dr in dt.Rows)
{
    list.Add(dr);
}

มีวิธีที่ดีกว่า / วิเศษ?


2
คุณพยายามทำอะไรกับรายการที่คุณไม่สามารถทำได้กับ DataRowCollection ของคุณ
Jason Kealey

ของฉันช้า แต่หวังว่าจะเป็นประโยชน์ วิธีการทำงาน .. stackoverflow.com/a/58607820/9048996
Thameem

คำตอบ:


276

หากคุณใช้. NET 3.5 คุณสามารถใช้DataTableExtensions.AsEnumerable(วิธีการขยาย) แล้วถ้าคุณต้องการจริงๆList<DataRow>แทนที่จะเป็นเพียงIEnumerable<DataRow>คุณสามารถโทรEnumerable.ToList:

IEnumerable<DataRow> sequence = dt.AsEnumerable();

หรือ

using System.Linq;
...
List<DataRow> list = dt.AsEnumerable().ToList();

วิธีแปลงนี้listเป็น json
ACP

6
@Pandiya: มีหลายวิธีในการแปลงข้อมูลเป็น JSON ใน. NET โดยส่วนตัวฉันมักจะใช้ไลบรารี JSON.NET แต่ก็มีวิธีอื่นเช่นกัน
Jon Skeet


1
@ จอน Skeet: ฉันต้องการรับค่าใน DataRow มีวิธีใดบ้าง? แทนที่จะเป็นรายการที่ชอบรายการ ItemArray [0]
Ramesh Durai

@ จอน, FYI: dt.AsEnumerable (). ToList () 'System.Data.EnumerableRowCollection <System.Data.DataRow>' ไม่มีคำจำกัดความสำหรับ 'ToList'
Pradip

66
List<Employee> emp = new List<Employee>();

//Maintaining DataTable on ViewState
//For Demo only

DataTable dt = ViewState["CurrentEmp"] as DataTable;

//read data from DataTable 
//using lamdaexpression


emp = (from DataRow row in dt.Rows

   select new Employee
   {
       _FirstName = row["FirstName"].ToString(),
       _LastName = row["Last_Name"].ToString()

   }).ToList();

โค้ดด้านบนอาจไม่ทำงาน bcs dt.Rows ยังไม่ได้ใช้งาน 'AsEnumerable' สิ่งนี้สามารถแก้ไขได้ดังนี้: emp = (จากแถว DataRow ใน dt.AsEnumerable () เลือกพนักงานใหม่ {_FirstName = แถว ["FirstName"]. ToString (), _LastName = แถว ["Last_Name"]. ToString ()} .ToList ();
Navin Pandit

37

ด้วย C # 3.0 และ System.Data.DataSetExtensions.dll

List<DataRow> rows = table.Rows.Cast<DataRow>().ToList();

3
การทำเช่นนี้ได้ช่วยให้ประสิทธิภาพการทำงานเพียงแค่ใช้ foreach มากกว่า datarow ครั้ง 50%
lloydom

33

คุณสามารถใช้

List<DataRow> list = new List<DataRow>(dt.Select());

dt.Select()จะกลับแถวทั้งหมดในตารางของคุณเป็นอาร์เรย์ของ datarows และตัวListสร้างยอมรับอาร์เรย์ของวัตถุนั้นเป็นอาร์กิวเมนต์เพื่อเติมรายการของคุณในตอนแรก


เลือก () ไม่ต้องการพารามิเตอร์ใด ๆ การโอเวอร์โหลดแบบไม่มีพารามิเตอร์จะส่งคืนแถวทั้งหมด
Kon

ขอขอบคุณปรับคำตอบของฉันเพื่อให้เหมาะสมกับคำแนะนำของคุณ
Kibbee

15

คุณสามารถสร้างฟังก์ชั่นส่วนขยายเป็น:

public static List<T> ToListof<T>(this DataTable dt)
{
    const BindingFlags flags = BindingFlags.Public | BindingFlags.Instance;
    var columnNames = dt.Columns.Cast<DataColumn>()
        .Select(c => c.ColumnName)
        .ToList();
    var objectProperties = typeof(T).GetProperties(flags);
    var targetList = dt.AsEnumerable().Select(dataRow =>
    {
        var instanceOfT = Activator.CreateInstance<T>();

        foreach (var properties in objectProperties.Where(properties => columnNames.Contains(properties.Name) && dataRow[properties.Name] != DBNull.Value))
        {
            properties.SetValue(instanceOfT, dataRow[properties.Name], null);
        }
        return instanceOfT;
    }).ToList();

    return targetList;
}


var output = yourDataInstance.ToListof<targetModelType>();

ใช้งานไม่ได้ - ดูdotnetfiddle.net/I22r2c นอกจากนี้ควรสังเกตว่าการใช้ Reflection นั้นช้าและไม่แนะนำในรหัสที่มีประสิทธิภาพที่สำคัญ
Almenon

คุณต้องเพิ่มข้อมูลประเภทข้อมูลสำหรับคอลัมน์ DataTable dt = new DataTable (); dt.Columns.Add ("id", typeof (Int32)); dt.Columns.Add ( "ชื่อ" typeof (String)); dt.Columns.Add ("foo", typeof (DateTime)); สำหรับ (int i = 0; i <= 1,000; i ++) {dt.Rows.Add (i, "foo", DateTime.Now);}
Rahul Garg

ใช้งานได้ทันที ขอบคุณ
Almenon

14

หากคุณต้องการให้รายการค่าจากฟิลด์ int "ID" ถูกส่งคืนคุณสามารถใช้ ...

List<int> ids = (from row in dt.AsEnumerable() select Convert.ToInt32(row["ID"])).ToList();

12

ฉันได้เพิ่มการดัดแปลงบางอย่างในรหัสจากคำตอบนี้ ( https://stackoverflow.com/a/24588210/4489664 ) เพราะสำหรับประเภท nullable มันจะส่งกลับข้อยกเว้น

public static List<T> DataTableToList<T>(this DataTable table) where T: new()
{
    List<T> list = new List<T>();
    var typeProperties = typeof(T).GetProperties().Select(propertyInfo => new
        {
            PropertyInfo = propertyInfo,
            Type = Nullable.GetUnderlyingType(propertyInfo.PropertyType) ?? propertyInfo.PropertyType
        }).ToList();

    foreach (var row in table.Rows.Cast<DataRow>())
    {
        T obj = new T();
        foreach (var typeProperty in typeProperties)
        {
            object value = row[typeProperty.PropertyInfo.Name];
            object safeValue = value == null || DBNull.Value.Equals(value)
                ? null
                : Convert.ChangeType(value, typeProperty.Type);

            typeProperty.PropertyInfo.SetValue(obj, safeValue, null);
        }
        list.Add(obj);
    }
    return list;
}

ฉันลบคลาสออกเพราะมันสามารถทำงานกับ struct ได้เช่นกัน
มิกกี้ Perlstein

มันใช้งานได้ดีดีมาก หากใครต้องการเล่นด้วยรหัสฉันสร้างซอ. net ที่ลิงค์นี้: dotnetfiddle.net/mTKevy
Almenon

@ Almenon ฉันได้เพิ่มการปรับเปลี่ยนเล็กน้อยควรเพิ่มประสิทธิภาพ
นิดหน่อย

11
using System.Data;


var myEnumerable = myDataTable.AsEnumerable();

List<MyClass> myClassList =
    (from item in myEnumerable
     select new MyClass{
         MyClassProperty1 = item.Field<string>("DataTableColumnName1"),
         MyClassProperty2 = item.Field<string>("DataTableColumnName2")
    }).ToList();

ยอดเยี่ยม! คุณบันทึกวันของฉัน
Anynomous Khan



4

อีกวิธีหนึ่ง 'วิเศษ' และไม่จำเป็นต้องใช้. NET 3.5

ตัวอย่างเช่นถ้าDBDatatableส่งคืนคอลัมน์เดียวของ Guids (uniqueidentifier ใน SQL) คุณสามารถใช้:

Dim gList As New List(Of Guid)
gList.AddRange(DirectCast(DBDataTable.Select(), IEnumerable(Of Guid)))

4
// this is better suited for expensive object creation/initialization
IEnumerable<Employee> ParseEmployeeTable(DataTable dtEmployees)
{
    var employees = new ConcurrentBag<Employee>();

    Parallel.ForEach(dtEmployees.AsEnumerable(), (dr) =>
    {
        employees.Add(new Employee() 
        {
            _FirstName = dr["FirstName"].ToString(),
            _LastName = dr["Last_Name"].ToString()
        });
    });

    return employees;
}

3

DataTable.Select() ไม่ให้แถวตามลำดับที่ปรากฏใน DataTable

หากการสั่งซื้อเป็นสิ่งสำคัญที่ผมรู้สึก iterating กว่าคอลเลกชัน DataRow DataTable.Select(string filterexpression, string sort)และกลายเป็นรายการเป็นวิธีที่เหมาะสมที่จะไปหรือคุณยังสามารถใช้เกินพิกัดของ

แต่โอเวอร์โหลดนี้อาจไม่สามารถจัดการการสั่งซื้อทั้งหมด (เช่นเรียงตามกรณี ... ) ที่ SQL จัดเตรียมไว้


3
DataTable dt;   // datatable should contains datacolumns with Id,Name

List<Employee> employeeList=new List<Employee>();  // Employee should contain  EmployeeId, EmployeeName as properties

foreach (DataRow dr in dt.Rows)
{
    employeeList.Add(new Employee{EmployeeId=dr.Id,EmplooyeeName=dr.Name});
}


1
        /* This is a generic method that will convert any type of DataTable to a List 
         * 
         * 
         * Example :    List< Student > studentDetails = new List< Student >();  
         *              studentDetails = ConvertDataTable< Student >(dt);  
         *
         * Warning : In this case the DataTable column's name and class property name
         *           should be the same otherwise this function will not work properly
         */

ต่อไปนี้เป็นสองฟังก์ชั่นซึ่งถ้าเราผ่าน DataTable และคลาสที่ผู้ใช้กำหนด จากนั้นจะส่งคืนรายการของคลาสนั้นด้วย DataTable data

        public 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())
                {
                   //in case you have a enum/GUID datatype in your model
                   //We will check field's dataType, and convert the value in it.
                    if (pro.Name == column.ColumnName){                
                    try
                    {
                        var convertedValue = GetValueByDataType(pro.PropertyType, dr[column.ColumnName]);
                        pro.SetValue(obj, convertedValue, null);
                    }
                    catch (Exception e)
                    {         
                       //ex handle code                   
                        throw;
                    }
                        //pro.SetValue(obj, dr[column.ColumnName], null);
                }
                    else
                        continue;
                }
            }
            return obj;
        }

วิธีนี้จะตรวจสอบประเภทข้อมูลของฟิลด์และแปลงค่า dataTable เป็นประเภทข้อมูลนั้น

    private static object GetValueByDataType(Type propertyType, object o)
    {
        if (o.ToString() == "null")
        {
            return null;
        }
        if (propertyType == (typeof(Guid)) || propertyType == typeof(Guid?))
        {
            return Guid.Parse(o.ToString());
        }
        else if (propertyType == typeof(int) || propertyType.IsEnum) 
        {
            return Convert.ToInt32(o);
        }
        else if (propertyType == typeof(decimal) )
        {
            return Convert.ToDecimal(o);
        }
        else if (propertyType == typeof(long))
        {
            return Convert.ToInt64(o);
        }
        else if (propertyType == typeof(bool) || propertyType == typeof(bool?))
        {
            return Convert.ToBoolean(o);
        }
        else if (propertyType == typeof(DateTime) || propertyType == typeof(DateTime?))
        {
            return Convert.ToDateTime(o);
        }
        return o.ToString();
    }

ในการเรียกใช้เมธอดก่อนหน้านี้ให้ใช้ไวยากรณ์ต่อไปนี้:

List< Student > studentDetails = new List< Student >();  
studentDetails = ConvertDataTable< Student >(dt); 

เปลี่ยนชื่อคลาสนักเรียนและค่า dt ตามความต้องการของคุณ ในกรณีนี้ชื่อของคอลัมน์ DataTable และชื่อคุณสมบัติคลาสควรเหมือนกันมิฉะนั้นฟังก์ชันนี้จะทำงานไม่ถูกต้อง


1
ขอบคุณสำหรับคำตอบ. มันจะดีถ้าคุณจะเพิ่มคำอธิบายสั้น ๆ และความคิดเห็นเล็กน้อยในรหัสของคุณ สิ่งนี้ช่วยให้ผู้คนเข้าใจคำตอบของคุณดีขึ้น
Andre Hofmeister

0

สิ่งนี้ใช้งานได้สำหรับฉัน: ต้องการอย่างน้อย. Net Framework 3.5, โค้ดด้านล่างแสดง DataRow เปลี่ยนเป็น Generic.IEnumerable, comboBox1 ถูกใช้เพื่อการแสดงที่ดีขึ้น

using System.Linq;

DataTable dt = new DataTable();            
dt = myClass.myMethod();                 
List<object> list = (from row in dt.AsEnumerable() select (row["name"])).ToList();
comboBox1.DataSource = list;

0

เอาท์พุต

public class ModelUser
{
    #region Model

    private string _username;
    private string _userpassword;
    private string _useremail;
    private int _userid;

    /// <summary>
    /// 
    /// </summary>
    public int userid
    {
        set { _userid = value; }
        get { return _userid; }
    }


    /// <summary>
    /// 
    /// </summary>

    public string username
    {
        set { _username = value; }
        get { return _username; }
    }

    /// <summary>
    /// 
    /// </summary>
    public string useremail
    {
        set { _useremail = value; }
        get { return _useremail; }
    }

    /// <summary>
    /// 
    /// </summary>
    public string userpassword
    {
        set { _userpassword = value; }
        get { return _userpassword; }
    }
    #endregion Model
}

public List<ModelUser> DataTableToList(DataTable dt)
{
    List<ModelUser> modelList = new List<ModelUser>();
    int rowsCount = dt.Rows.Count;
    if (rowsCount > 0)
    {
        ModelUser model;
        for (int n = 0; n < rowsCount; n++)
        {
            model = new ModelUser();

            model.userid = (int)dt.Rows[n]["userid"];
            model.username = dt.Rows[n]["username"].ToString();
            model.useremail = dt.Rows[n]["useremail"].ToString();
            model.userpassword = dt.Rows[n]["userpassword"].ToString();

            modelList.Add(model);
        }
    }
    return modelList;
}

static DataTable GetTable()
{
    // Here we create a DataTable with four columns.
    DataTable table = new DataTable();
    table.Columns.Add("userid", typeof(int));
    table.Columns.Add("username", typeof(string));
    table.Columns.Add("useremail", typeof(string));
    table.Columns.Add("userpassword", typeof(string));

    // Here we add five DataRows.
    table.Rows.Add(25, "Jame", "Jame@hotmail.com", DateTime.Now.ToString());
    table.Rows.Add(50, "luci", "luci@hotmail.com", DateTime.Now.ToString());
    table.Rows.Add(10, "Andrey", "Andrey@hotmail.com", DateTime.Now.ToString());
    table.Rows.Add(21, "Michael", "Michael@hotmail.com", DateTime.Now.ToString());
    table.Rows.Add(100, "Steven", "Steven@hotmail.com", DateTime.Now.ToString());
    return table;
}

protected void Page_Load(object sender, EventArgs e)
{
    List<ModelUser> userList = new List<ModelUser>();

    DataTable dt = GetTable();

    userList = DataTableToList(dt);

    gv.DataSource = userList;
    gv.DataBind();
}[enter image description here][1]

</asp:GridView>
</div>

0

เราสามารถใช้วิธีการทั่วไปสำหรับการแปลงDataTableเพื่อListแทนการแปลงไปDataTableList

หมายเหตุ: DataTable's ColumnNameและType' s PropertyNameควรจะเหมือนกัน

โทรวิธีการด้านล่าง:

long result = Utilities.ConvertTo<Student>(dt ,out listStudent);

// Generic Method
public class Utilities
{
    public static long ConvertTo<T>(DataTable table, out List<T> entity)
    {
        long returnCode = -1;
        entity = null;

        if (table == null)
        {
            return -1;
        }

        try
        {
            entity = ConvertTo<T>(table.Rows);
            returnCode = 0;
        }

        catch (Exception ex)
        {
            returnCode = 1000;
        }

        return returnCode;
    }

    static List<T> ConvertTo<T>(DataRowCollection rows)
    {
        List<T> list = null;
        if (rows != null)
        {
            list = new List<T>();

            foreach (DataRow row in rows)
            {
                T item = CreateItem<T>(row);
                list.Add(item);
            }
        }

        return list;
    }

    static T CreateItem<T>(DataRow row)
    {
        string str = string.Empty;
        string strObj = string.Empty;

        T obj = default(T);

        if (row != null)
        {
            obj = Activator.CreateInstance<T>();
            strObj = obj.ToString();
            NameValueCollection objDictionary = new NameValueCollection();

            foreach (DataColumn column in row.Table.Columns)
            {
                PropertyInfo prop = obj.GetType().GetProperty(column.ColumnName);

                if (prop != null)
                {
                    str = column.ColumnName;

                    try
                    {
                        objDictionary.Add(str, row[str].ToString());
                        object value = row[column.ColumnName];
                        Type vType = obj.GetType();

                        if (value == DBNull.Value)
                        {
                            if (vType == typeof(int) || vType == typeof(Int16)
                                                     || vType == typeof(Int32)
                                                     || vType == typeof(Int64)
                                                     || vType == typeof(decimal)
                                                     || vType == typeof(float)
                                                     || vType == typeof(double))
                            {
                                value = 0;
                            }

                            else if (vType == typeof(bool))
                            {
                                value = false;
                            }

                            else if (vType == typeof(DateTime))
                            {
                                value = DateTime.MaxValue;
                            }

                            else
                            {
                                value = null;
                            }

                            prop.SetValue(obj, value, null);
                        }

                        else
                        {
                            prop.SetValue(obj, value, null);
                        }
                    }

                    catch(Exception ex)
                    {

                    }
                }
            }

            PropertyInfo ActionProp = obj.GetType().GetProperty("ActionTemplateValue");

            if (ActionProp != null)
            {
                object ActionValue = objDictionary;
                ActionProp.SetValue(obj, ActionValue, null);
            }
        }

        return obj;
    }
}

0

คุณสามารถใช้วิธีการทั่วไปเช่นนั้นสำหรับ DataTable รายการทั่วไป

public static List<T> DataTableToList<T>(this DataTable table) where T : class, new()
{
    try
    {
        List<T> list = new List<T>();

        foreach (var row in table.AsEnumerable())
        {
            T obj = new T();

            foreach (var prop in obj.GetType().GetProperties())
            {
                try
                {
                    PropertyInfo propertyInfo = obj.GetType().GetProperty(prop.Name);
                    if (propertyInfo.PropertyType.IsEnum)
                    {
                        propertyInfo.SetValue(obj, Enum.Parse(propertyInfo.PropertyType, row[prop.Name].ToString()));
                    }
                    else
                    {
                        propertyInfo.SetValue(obj, Convert.ChangeType(row[prop.Name], propertyInfo.PropertyType), null);
                    }                          
                }
                catch
                {
                    continue;
                }
            }

            list.Add(obj);
        }

        return list;
    }
    catch
    {
        return null;
    }
}

0

การแปลงDataTableเป็น GenericDictionary

public static Dictionary<object,IList<dynamic>> DataTable2Dictionary(DataTable dt)
{
    Dictionary<object, IList<dynamic>> dict = new Dictionary<dynamic, IList<dynamic>>();

    foreach(DataColumn column in dt.Columns)
    {
        IList<dynamic> ts = dt.AsEnumerable()
                              .Select(r => r.Field<dynamic>(column.ToString()))
                              .ToList();
        dict.Add(column, ts);
    }
    return dict;
}

0

ใช้ส่วนขยาย:

public static class Extensions
{
    #region Convert Datatable To List
    public static IList<T> ToList<T>(this DataTable table) where T : new()
    {
        IList<PropertyInfo> properties = typeof(T).GetProperties().ToList();
        IList<T> result = new List<T>();

        foreach (var row in table.Rows)
        {
            var item = CreateItemFromRow<T>((DataRow)row, properties);
            result.Add(item);
        }
        return result;
    }
    private static T CreateItemFromRow<T>(DataRow row, IList<PropertyInfo> properties) where T : new()
    {
        T item = new T();
        foreach (var property in properties)
        {
            property.SetValue(item, row[property.Name], null);
        }
        return item;
    }
    #endregion
}

0

เมื่อต้องการกำหนดแถว DataTable ให้กับรายการทั่วไปของคลาส

  List<Candidate> temp = new List<Candidate>();//List that holds the Candidate Class,
    //Note:The Candidate class contains RollNo,Name and Department
    //tb is DataTable
    temp = (from DataRow dr in tb.Rows
                        select new Candidate()
                        {
                            RollNO = Convert.ToInt32(dr["RollNO"]),
                            Name = dr["Name"].ToString(),
                            Department = dr["Department"].ToString(),

                        }).ToList();

0

วิธีที่ง่ายที่สุดในการแปลง DataTable เป็นรายการ Generic ของคลาส

ใช้ Newtonsoft.Json;

var json = JsonConvert.SerializeObject(dataTable);
var model = JsonConvert.DeserializeObject<List<ClassName>>(json);

0

คุณสามารถใช้ฟังก์ชันทั่วไปสองฟังก์ชันต่อไปนี้

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].ToString(), null);
                else
                    continue;
            }
        }
        return obj;
    }

และใช้มันดังต่อไปนี้

List<StudentScanExamsDTO> studentDetails = ConvertDataTable<StudentScanExamsDTO>(dt);

0
lPerson = dt.AsEnumerable().Select(s => new Person()
        {
            Name = s.Field<string>("Name"),
            SurName = s.Field<string>("SurName"),
            Age = s.Field<int>("Age"),
            InsertDate = s.Field<DateTime>("InsertDate")
        }).ToList();

ลิงก์ไปยังตัวอย่างการทำงานของDotNetFiddle

using System;
using System.Collections.Generic;   
using System.Data;
using System.Linq;
using System.Data.DataSetExtensions;

public static void Main()
{
    DataTable dt = new DataTable();
    dt.Columns.Add("Name", typeof(string));
    dt.Columns.Add("SurName", typeof(string));
    dt.Columns.Add("Age", typeof(int));
    dt.Columns.Add("InsertDate", typeof(DateTime));

    var row1= dt.NewRow();
    row1["Name"] = "Adam";
    row1["SurName"] = "Adam";
    row1["Age"] = 20;
    row1["InsertDate"] = new DateTime(2020, 1, 1);
    dt.Rows.Add(row1);

    var row2 = dt.NewRow();
    row2["Name"] = "John";
    row2["SurName"] = "Smith";
    row2["Age"] = 25;
    row2["InsertDate"] = new DateTime(2020, 3, 12);
    dt.Rows.Add(row2);

    var row3 = dt.NewRow();
    row3["Name"] = "Jack";
    row3["SurName"] = "Strong";
    row3["Age"] = 32;
    row3["InsertDate"] = new DateTime(2020, 5, 20);
    dt.Rows.Add(row3);

    List<Person> lPerson = new List<Person>();
    lPerson = dt.AsEnumerable().Select(s => new Person()
    {
        Name = s.Field<string>("Name"),
        SurName = s.Field<string>("SurName"),
        Age = s.Field<int>("Age"),
        InsertDate = s.Field<DateTime>("InsertDate")
    }).ToList();

    foreach(Person pers in lPerson)
    {
        Console.WriteLine("{0} {1} {2} {3}", pers.Name, pers.SurName, pers.Age, pers.InsertDate);
    }
}   

public class Person
{
    public string Name { get; set; }
    public string SurName { get; set; }
    public int Age { get; set; }
    public DateTime InsertDate { get; set; }
}

}

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.