Linq中的ToList()和CopyToDataTable()


最近在項目中使用了Linq,想把Linq的查詢結果直接轉換成DataTable對象,通過查找發現Linq有一個CopyToDataTable<T>的泛型方法,該方法只能在T是DataRow的情況下使用,發現了這個方法以后就直接在項目中使用了,但是在使用的過程中發現,如果Linq的查詢結果不包含任何DataRow對象的時候,使用CopyToDataTable()方法會報錯,代碼如下:

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Text;
 5 using System.Threading.Tasks;
 6 using System.Configuration;
 7 using System.Data;
 8 using System.Data.SqlClient;
 9 
10 namespace CopyToDataTableDemo
11 {
12     class Program
13     {
14         static void Main(string[] args)
15         {
16             string strConn = ConfigurationManager.ConnectionStrings["AppConnection"].ConnectionString;
17             using (SqlConnection conn = new SqlConnection(strConn))
18             {
19                 string strSQL = "SELECT * FROM Product";
20                 SqlCommand cmd = new SqlCommand(strSQL, conn);
21                 SqlDataAdapter adapter = new SqlDataAdapter(cmd);
22                 conn.Open();
23                 try
24                 {
25                     DataTable dt = new DataTable();
26                     adapter.Fill(dt);
27                     //CopyToDataTable()
28                     DataTable dtTemp = dt.AsEnumerable().Where<DataRow>(p =>
29                     {
30                         return p["ProductId"].ToString().Trim().Equals("4");
31                     }).CopyToDataTable();
32 
33                 }
34                 catch (Exception ex)
35                 {
36                    
37                 }
38                 finally
39                 {
40                     conn.Close();
41                 }
42             }
43         }
44     }
45 }

 報錯信息如下:

該錯誤信息說明如果Linq的查詢結果不包含任何DataRow對象的時候,使用該方法會報錯,那么怎么將Linq的查詢結果轉換成DataTable使用呢?

繼續查詢Linq的方法,發現Linq還有一個ToList()的方法,使用該方法可以解決Linq查詢結果不包含任何DataRow對象時報錯的問題,代碼修改如下:

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Text;
 5 using System.Threading.Tasks;
 6 using System.Configuration;
 7 using System.Data;
 8 using System.Data.SqlClient;
 9 
10 namespace CopyToDataTableDemo
11 {
12     class Program
13     {
14         static void Main(string[] args)
15         {
16             string strConn = ConfigurationManager.ConnectionStrings["AppConnection"].ConnectionString;
17             using (SqlConnection conn = new SqlConnection(strConn))
18             {
19                 string strSQL = "SELECT * FROM Product";
20                 SqlCommand cmd = new SqlCommand(strSQL, conn);
21                 SqlDataAdapter adapter = new SqlDataAdapter(cmd);
22                 conn.Open();
23                 try
24                 {
25                     DataTable dt = new DataTable();
26                     adapter.Fill(dt);
27                     //CopyToDataTable()
28                     // 當LINQ的查詢結果不包含任何DataRow對象的時候會報錯
29                     //DataTable dtTemp = dt.AsEnumerable().Where<DataRow>(p =>
30                     //{
31                     //    return p["ProductId"].ToString().Trim().Equals("4");
32                     //}).CopyToDataTable();
33 
34                     //ToList()
35                     List<DataRow> list = dt.AsEnumerable().Where<DataRow>(p =>
36                     {
37                         return p["ProductId"].ToString().Trim().Equals("4");
38                     }).ToList();
39                     if (list.Count > 0)
40                     {
41                         DataTable dtTemp = dt.Clone();
42                         // 循環遍歷list轉換成DataTable
43                         list.ForEach(p => 
44                         {
45                             dtTemp.Rows.Add(p.ItemArray);
46                         });
47                     }
48 
49                 }
50                 catch (Exception ex)
51                 {
52                    
53                 }
54                 finally
55                 {
56                     conn.Close();
57                 }
58             }
59         }
60     }
61 }

 使用ToList()方法就可以解決該報錯問題了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM