public
static
class
DataTableExtensions
{
public
static
List<T> ToList<T>(
this
DataTable dt)
where
T :
new
()
{
var
list =
new
List<T>();
if
(dt ==
null
)
return
list;
var
len = dt.Rows.Count;
for
(
var
i = 0; i < len; i++)
{
var
info =
new
T();
foreach
(DataColumn dc
in
dt.Rows[i].Table.Columns)
{
var
field = dc.ColumnName;
var
value = dt.Rows[i][field].ToString();
if
(
string
.IsNullOrEmpty(value))
continue
;
if
(IsDate(value))
{
value = DateTime.Parse(value).ToString();
}
var
p = info.GetType().GetProperty(field);
try
{
if
(p.PropertyType ==
typeof
(
string
))
{
p.SetValue(info, value,
null
);
}
else
if
(p.PropertyType ==
typeof
(
int
))
{
p.SetValue(info,
int
.Parse(value),
null
);
}
else
if
(p.PropertyType ==
typeof
(
bool
))
{
p.SetValue(info,
bool
.Parse(value),
null
);
}
else
if
(p.PropertyType ==
typeof
(DateTime))
{
p.SetValue(info, DateTime.Parse(value),
null
);
}
else
if
(p.PropertyType ==
typeof
(
float
))
{
p.SetValue(info,
float
.Parse(value),
null
);
}
else
if
(p.PropertyType ==
typeof
(
double
))
{
p.SetValue(info,
double
.Parse(value),
null
);
}
else
{
p.SetValue(info, value,
null
);
}
}
catch
(Exception)
{
}
}
list.Add(info);
}
dt.Dispose(); dt =
null
;
return
list;
}
/// <summary>
/// 按照属性顺序的列名集合
/// </summary>
public
static
IList<
string
> GetColumnNames(
this
DataTable dt)
{
DataColumnCollection dcc = dt.Columns;
IList<
string
> list =
new
List<
string
>(dcc.Count);
foreach
(DataColumn dc
in
dcc)
{
list.Add(dc.ColumnName);
}
return
list;
}
private
static
bool
IsDate(
string
d)
{
DateTime d1;
double
d2;
return
!
double
.TryParse(d,
out
d2) && DateTime.TryParse(d,
out
d1);
}
}