欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Linq中ToList()和CopyToDataTable()用法詳解

 更新時間:2022年03月07日 09:27:42   作者:.NET開發(fā)菜鳥  
這篇文章介紹了Linq中ToList()和CopyToDataTable()的用法,文中通過示例代碼介紹的非常詳細。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下

最近在項目中使用了Linq,想把Linq的查詢結(jié)果直接轉(zhuǎn)換成DataTable對象,通過查找發(fā)現(xiàn)Linq有一個CopyToDataTable<T>的泛型方法,該方法只能在T是DataRow的情況下使用,發(fā)現(xiàn)了這個方法以后就直接在項目中使用了,但是在使用的過程中發(fā)現(xiàn),如果Linq的查詢結(jié)果不包含任何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<DataRow>(p =>
                    {
                        return p["ProductId"].ToString().Trim().Equals("4");
                    }).CopyToDataTable();

                }
                catch (Exception ex)
                {

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

報錯信息如下:

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

繼續(xù)查詢Linq的方法,發(fā)現(xiàn)Linq還有一個ToList()的方法,使用該方法可以解決Linq查詢結(jié)果不包含任何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()
                    // 當(dāng)LINQ的查詢結(jié)果不包含任何DataRow對象的時候會報錯
                    //DataTable dtTemp = dt.AsEnumerable().Where<DataRow>(p =>
                    //{
                    //    return p["ProductId"].ToString().Trim().Equals("4");
                    //}).CopyToDataTable();

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

                }
                catch (Exception ex)
                {

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

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

到此這篇關(guān)于Linq中ToList()和CopyToDataTable()用法的文章就介紹到這了。希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

最新評論