zoukankan      html  css  js  c++  java
  • C#在DataTable中使用LINQ

    C#在DataTable中使用LINQ

    LINQ 查询适用于实现的数据源 IEnumerable<T>接口或System.Query.IQueryable接口。 

    DataTable类默认是没有实现以上接口的。

    所以要在DataTable中使用LINQ查询,需要调用一下AsEnumerable方法,返回一个EnumerableRowCollection<DataRow>集合。

    这样我们就可以在DataTable中使用LINQ查询了

    首先创建测试数据

     1 private static DataTable GetStuTable()
     2         {
     3 
     4             int[] id = { 4, 5, 1, 3, 2, 7, 6 };
     5             string[] name = {"Tom","Jack","HelloWorld","Visual Studio","Gril","Timmy","Geo" };
     6             DataTable table = new DataTable("Student");
     7             table.Columns.Add("ID", typeof(int));
     8             table.Columns.Add("Name", typeof(string));
     9 
    10             for(int i = 0;i< id.Length;i++)
    11             {
    12                 table.Rows.Add(new object[] { id[i],name[i]});
    13             }
    14 
    15             return table;
    16         }

    复制代码

    1、使用LINQ对DataTable进行排序

    复制代码

     1 DataTable dt = GetNumbersTable();
     2 
     3             var students = dt.AsEnumerable();
     4 
     5             //排序
     6             var result = students.OrderBy(x => x.Field<int>("ID"));
     7 
     8             //输出
     9             Console.WriteLine("ID" + "	" + "Name");
    10             foreach (DataRow row in result)
    11             {
    12                 Console.WriteLine(row["ID"].ToString() + "	" + row["Name"].ToString());
    13             }

    复制代码

    运行结果如下

     2、将LINQ查询结果保存为DataTable

    这里只要调用DataTableExtensions. CopyToDataTable< T>方法就行了。(需要引用System.Data.DataSetExtensions.dll程序集)

    复制代码

     1 static void Main(string[] args)
     2         {
     3             DataTable dt = GetNumbersTable();
     4 
     5             var students = dt.AsEnumerable();
     6 
     7             DataTable tempDataTable = students.OrderByDescending(x => x.Field<int>("ID")).CopyToDataTable<DataRow>();
     8 
     9             for (int i = 0; i < tempDataTable.Columns.Count; i++)
    10             {
    11                 Console.Write(tempDataTable.Columns[i].Caption + "	");
    12             }
    13 
    14             Console.WriteLine();
    15             for (int i = 0; i < tempDataTable.Rows.Count; i++)
    16             {
    17                 for (int j = 0; j < tempDataTable.Columns.Count; j++)
    18                 {
    19                     Console.Write(tempDataTable.Rows[i][j].ToString() + "	");
    20                 }
    21                 Console.WriteLine();
    22             }
    23         }

    复制代码

    运行结果如下

     3、转换为List集合

    针对示例数据,创建相应的数据结构

    1 public class Student
    2     {
    3         public string ID { get; set; }
    4         public string Name { get; set; }
    5     }

    转换为List集合

    复制代码

     1  static void Main(string[] args)
     2         {
     3             DataTable dt = GetNumbersTable();
     4 
     5             var students = dt.AsEnumerable();
     6 
     7             List<Student> list = students.Select
     8                 (
     9                     x=> new Student
    10                     {
    11                         ID = x.Field<int>("ID"),
    12                         Name = x.Field<string>("Name")
    13                     }
    14                 ).ToList();
    15 
    16             foreach (var item in list)
    17             {
    18                 Console.WriteLine(item.ID + "	" + item.Name);
    19             }
    20         }

    复制代码

    运行结果

  • 相关阅读:
    POJ1422 最小路径覆盖
    POJ1422 最小路径覆盖
    POJ1125 Floyd
    POJ1125 Floyd
    POJ2570 二进制,位运算,Floyd
    POJ2570 二进制,位运算,Floyd
    POJ2446 二分匹配
    POJ2536 二分图匹配
    POJ2536 二分图匹配
    POJ3692 最大点权独立集元素个数
  • 原文地址:https://www.cnblogs.com/grj001/p/12223047.html
Copyright © 2011-2022 走看看