Linq中ToList()和CopyToDataTable()用法詳解
最近在項目中使用了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)文章
asp.net中關(guān)于dropdwonlist無法獲得值問題
用dropdwonlist綁定了一個數(shù)據(jù)源做選擇,但是當(dāng)提交時,用控件屬性無法獲得相應(yīng)的值,打印出來每次都是顯示的第一個值2011-11-11
ASP.NET中的DataGridView綁定數(shù)據(jù)和選中行刪除功能具體實例
廢話就不多說了,都說.NET是托控件的,我就托給你們看,這個博文主要講 DataGridView 的數(shù)據(jù)綁定,和選中行刪除功能2013-12-12
ASP.NET實現(xiàn)單點登陸(SSO)適用于多種情況
這篇文章主要介紹了ASP.NET在不同情況下實現(xiàn)單點登陸(SSO)的方法,在同主域但不同子域之間實現(xiàn)單點登陸等等2014-09-09
異步 HttpContext.Current實現(xiàn)取值的方法(解決異步Application,Session,Cache.
在一個項目中,為了系統(tǒng)執(zhí)行效率更快,把一個經(jīng)常用到的數(shù)據(jù)庫表通過dataset放到Application中,發(fā)現(xiàn)在異步實現(xiàn)中每一次都會出現(xiàn)HttpContext.Current為null的異常,后來在網(wǎng)上查了好多資料,發(fā)現(xiàn)問這個問題的人多,回答的少2009-07-07

