Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将结果集转换为数据表_C#_Linq_Datatable - Fatal编程技术网

C# 将结果集转换为数据表

C# 将结果集转换为数据表,c#,linq,datatable,C#,Linq,Datatable,如何将选择DataTable的某些列的LINQ查询结果再次转换为DataTable DataTable dtN = new DataTable(); dtN.Columns.Add("Id"); dtN.Columns.Add("Name"); dtN.AcceptChanges(); for (int i = 1; i <= 10; i++) { DataRow dr = dtN.NewRow(); dr["Id"] = i; dr["Name"]

如何将选择
DataTable
的某些列的LINQ查询结果再次转换为
DataTable

DataTable dtN = new DataTable();

dtN.Columns.Add("Id");   
dtN.Columns.Add("Name");
dtN.AcceptChanges();

for (int i = 1; i <= 10; i++)
{
    DataRow dr = dtN.NewRow();
    dr["Id"] = i;  
    dr["Name"] = "A"+i.ToString();
    dtN.Rows.Add(dr);
    dtN.AcceptChanges();
}

var data = from r in dtN.AsEnumerable()
           select new { Name = r["Name"].ToString() };

//this line is giving error because CopyToDatatable is not available
DataTable dt = data.CopyToDataTable();
DataTable dtN=newdatatable();
dtN.列。添加(“Id”);
dtN.列。添加(“名称”);
dtN.AcceptChanges();
对于(inti=1;i
DataTable dtN=newdatatable();
dtN.列。添加(“Id”);
dtN.列。添加(“名称”);
dtN.AcceptChanges();

对于(int i=1;i如果您有一个包含许多列的
数据表

var dt = new DataTable();
dt.Columns.Add("Foo",  typeof(string));
dt.Columns.Add("Name", typeof(string));
dt.Columns.Add("Bar",  typeof(int));

dt.Rows.Add(new object[]{"Foo",  "Max",   555});
dt.Rows.Add(new object[]{"Blub", "Marry", 123});
dt.Rows.Add(new object[]{"Bla",  "Mac",   999});

但您只对其中一列或部分列中的
DataTable
感兴趣,而不是全部,您可以简单地使用
DataView

var nameOnlyTable = new DataView(dt).ToTable(false, new []{"Name"});


不需要LINQ。

感谢您的支持。var data=from r in dtN.AsEnumerable()选择r;DataTable dt=data.CopyToDataTable();请参阅上面的代码块,我不想创建新表,因为它只是我的场景(real)中的一个示例有许多列,我需要10列,因此我必须创建一个新表,然后必须运行一个循环。var data=from r in dtN.AsEnumerable()选择r;DataTable dt=data.CopyToDataTable();//当我们选择整列r(r是DataTable中的整列)时,这是可用的,但当我们在dtN.AsEnumerable()中像这样使用var data=from r时选择新的{Name=r[“Name”].ToString()};(不是表中的所有列,那么我们就得不到数据。CopyToDataTable数据。CopyToDataTable()//这里是一个错误,你现在说,为了这个,你将不得不运行循环,但如果我将使用循环,那么LINQ的用途是什么then@user3129402编辑我的答案。希望这能帮助你们解决问题。谢谢你们的支持和回答,这可能是一个很好的替代品,但若有两个集合,你们将采用内部联接,然后使用linq从第一个集合中选择一列,从第二个集合中选择另一列,这样做没有帮助,但或多或少是一个不错的选择。再次感谢
var nameOnlyTable = new DataView(dt).ToTable(false, new []{"Name"});