C#用Linq实现DataTable转换成List的方法实例详解

C#开发 2014-08-19 24036阅读 0评论 0收藏 收藏本文
前段时间用反射的方法实现了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中某一列的数据类型的方法(不太好示截图,弄成几张,将就着看,呵呵): convert-list-1 convert-list-2 convert-list-3 convert-list-4 convert-list-5 好啦,从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;
    }
好了,更多的实现你可以自行研究,我在这就不一一列举了。 如果你觉得对你有用,请点个赞,你的肯定是我继续写博文的最大动力,谢谢。 如有问题,欢迎交流。 附:本实例源码

转载请注明:图享网 » C#用Linq实现DataTable转换成List的方法实例详解

文章评论

获取验证码