日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網站首頁 編程語言 正文

Linq中ToList()和CopyToDataTable()用法詳解_實用技巧

作者:.NET開發菜鳥 ? 更新時間: 2022-05-06 編程語言

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

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Configuration;
using System.Data;
using System.Data.SqlClient;

namespace CopyToDataTableDemo
{
    class Program
    {
        static void Main(string[] args)
        {
            string strConn = ConfigurationManager.ConnectionStrings["AppConnection"].ConnectionString;
            using (SqlConnection conn = new SqlConnection(strConn))
            {
                string strSQL = "SELECT * FROM Product";
                SqlCommand cmd = new SqlCommand(strSQL, conn);
                SqlDataAdapter adapter = new SqlDataAdapter(cmd);
                conn.Open();
                try
                {
                    DataTable dt = new DataTable();
                    adapter.Fill(dt);
                    //CopyToDataTable()
                    DataTable dtTemp = dt.AsEnumerable().Where(p =>
                    {
                        return p["ProductId"].ToString().Trim().Equals("4");
                    }).CopyToDataTable();

                }
                catch (Exception ex)
                {

                }
                finally
                {
                    conn.Close();
                }
            }
        }
    }
}

報錯信息如下:

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

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

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Configuration;
using System.Data;
using System.Data.SqlClient;

namespace CopyToDataTableDemo
{
    class Program
    {
        static void Main(string[] args)
        {
            string strConn = ConfigurationManager.ConnectionStrings["AppConnection"].ConnectionString;
            using (SqlConnection conn = new SqlConnection(strConn))
            {
                string strSQL = "SELECT * FROM Product";
                SqlCommand cmd = new SqlCommand(strSQL, conn);
                SqlDataAdapter adapter = new SqlDataAdapter(cmd);
                conn.Open();
                try
                {
                    DataTable dt = new DataTable();
                    adapter.Fill(dt);
                    //CopyToDataTable()
                    // 當LINQ的查詢結果不包含任何DataRow對象的時候會報錯
                    //DataTable dtTemp = dt.AsEnumerable().Where(p =>
                    //{
                    //    return p["ProductId"].ToString().Trim().Equals("4");
                    //}).CopyToDataTable();

                    //ToList()
                    List list = dt.AsEnumerable().Where(p =>
                    {
                        return p["ProductId"].ToString().Trim().Equals("4");
                    }).ToList();
                    if (list.Count > 0)
                    {
                        DataTable dtTemp = dt.Clone();
                        // 循環遍歷list轉換成DataTable
                        list.ForEach(p =>
                        {
                            dtTemp.Rows.Add(p.ItemArray);
                        });
                    }

                }
                catch (Exception ex)
                {

                }
                finally
                {
                    conn.Close();
                }
            }
        }
    }
}

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

原文鏈接:https://www.cnblogs.com/dotnet261010/p/8195840.html

欄目分類
最近更新