When converting a DataTable to list<t>, we found the online scheme, the original link: http://stackoverflow.com/questions/4593663/fetch-datarow-to-c-sharp-object.
When using, encountered DBNull can not be normal conversion problem , so did a correction supplement, continue to send code.
Supplementary amendments are welcome.
usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Data;usingSystem.Reflection; Public Static classdatatableextensions{ Public StaticIlist<t> tolist<t> ( ThisDataTable table)whereT:New() {IList<PropertyInfo> Properties =typeof(T). GetProperties (). ToList (); IList<T> result =NewList<t>(); foreach(varRowinchtable. Rows) {varitem = createitemfromrow<t>(DataRow) row, properties); Result. ADD (item); } returnresult; } Public StaticIlist<t> tolist<t> ( ThisDataTable table, dictionary<string,string> Mappings)whereT:New() {IList<PropertyInfo> Properties =typeof(T). GetProperties (). ToList (); IList<T> result =NewList<t>(); foreach(varRowinchtable. Rows) {varitem = createitemfromrow<t>(DataRow) row, properties, mappings); Result. ADD (item); } returnresult; } Private StaticT createitemfromrow<t> (DataRow row, ilist<propertyinfo> properties)whereT:New() {T Item=NewT (); foreach(varPropertyinchproperties) {property. SetValue (item, Row[property. Name],NULL); } returnitem; } Private StaticT createitemfromrow<t> (DataRow row, ilist<propertyinfo> properties, dictionary<string,string> Mappings)whereT:New() {T Item=NewT (); foreach(varPropertyinchproperties) { if(mappings. ContainsKey (property. Name) property. SetValue (item, (Row[mappings[property). Name]]= = DBNull.Value)?NULL: Row[mappings[property. Name]],NULL); } returnitem; }}
Convert a DataTable to list<t> using an extension method