前段时间用反射的方法实现了DataTable转换成List的方法(见:C# DataTable转换成List的方法与测试)。
今天用Linq来实现DataTable
到List<Object>
的转换,以前用DataTable
转换成List
都是for
来for
去的,当用了linq实现后,发现这种转换比for快捷多啦。
下面我还是以一个实例来作详细的实现和说明。首先,我们创建一个User类:
public class User
{
public int Id { get; set; }
public string Name { get; set; }
public string Email { get; set; }
public int Age { get; set; }
}
然后就是主程序的各种代码实现:
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Start...");
Console.WriteLine("Add data to datatable...");
var dt = InitDt();
var list = ConvertDataTableToObjectList(dt);
list.ForEach(x =>
{
Console.WriteLine("Element==>>Id:{0},Name:{1},Email:{2},Age:{3}", x.Id, x.Name, x.Email, x.Age);
});
Console.WriteLine("The end,press any key to exit...");
Console.ReadKey();
}
static List<User> ConvertDataTableToObjectList(DataTable dt)
{
var list = (from t in dt.AsEnumerable()
select (new User
{
/*注意:t.Field<int>("Id")中的int表示DataTable中的数据类型,Id表示对应的列
* t.Field<int>("Id")表示把DataTable中的列名为Id的列对应的值赋给User的Id属性,
* 如果你不确定Field的数据类型,你可以用断点来查看
*/
Id = t.Field<int>("Id"),
Name = t.Field<string>("Name"),
Email = t.Field<string>("Email"),
Age = t.Field<int>("Age"),
})).ToList();
return list;
}
static DataTable InitDt()
{
var dt = new DataTable();
dt.Columns.Add("Id", typeof(Int32));
dt.Columns.Add("Name", typeof(String));
dt.Columns.Add("Email", typeof(String));
dt.Columns.Add("Age", typeof(Int32));
for (int i = 1; i <= 5; i++)
{
var dr = dt.NewRow();
dr["Id"] = i;
dr["Name"] = "Name " + i;
dr["Email"] = "Eamil " + i;
dr["Age"] = 20 + i;
dt.Rows.Add(dr);
}
return dt;
}
}
下面我贴一下如何查看DataTable中某一列的数据类型的方法(不太好示截图,弄成几张,将就着看,呵呵):
好啦,从DataTable
到List<Object>
的转换就完成的,是不是比较快捷呢。当然,用Linq实现的好处肯定不止转换快捷这一点,你也可以结合Lambda表达式做如排序的操作,下面是把List<Object>
随机排序:
static List<User> ConvertDataTableToObjectList(DataTable dt)
{
var list = (from t in dt.AsEnumerable()
select (new User
{
/*注意:t.Field<int>("Id")中的int表示DataTable中的数据类型,Id表示对应的列
* t.Field<int>("Id")表示把DataTable中的列名为Id的列对应的值赋给User的Id属性,
* 如果你不确定Field的数据类型,你可以用断点来查看
*/
Id = t.Field<int>("Id"),
Name = t.Field<string>("Name"),
Email = t.Field<string>("Email"),
Age = t.Field<int>("Age"),
})).OrderBy(x => Guid.NewGuid().ToString()).ToList();
return list;
}
好了,更多的实现你可以自行研究,我在这就不一一列举了。
如果你觉得对你有用,请点个赞,你的肯定是我继续写博文的最大动力,谢谢。如有问题,欢迎交流。附:本实例源码
版权声明:本作品系原创,版权归码友网所有,如未经许可,禁止任何形式转载,违者必究。
发表评论
登录用户才能发表评论, 请 登 录 或者 注册