首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将中的结果集转换为Datatable

将中的结果集转换为Datatable
EN

Stack Overflow用户
提问于 2014-04-07 18:06:24
回答 2查看 2K关注 0票数 1

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

代码语言:javascript
复制
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();
EN

回答 2

Stack Overflow用户

发布于 2014-04-07 18:34:30

代码语言:javascript
复制
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() };

DataTable dt = new DataTable();
dt.Columns.Add("Name");
foreach(var s in data)
{
    DataRow dr = dt.NewRow();
    dr["Name"] = s.Name;
    dt.Rows.Add(dr);
    dt.AcceptChanges();
}
//DataTable dt = data.CopyToDataTable();

编辑: CopyToDataTable()仅在IEnumerable<T>上可用,其中T是或派生自DataRow

所以在第一个案例中,var data=from r in dtN.AsEnumerable() select r;

因为您的查询返回一个IEnumerable<'DataRow>,所以CopyToDataTable()可用。

但在第二种情况下,var data = from r in dtN.AsEnumerable() select new { Name = r["Name"].ToString() };

返回的是匿名类型。匿名类型不带有CopyToDataTable()的扩展方法。

如果您希望将非datatable派生的T转换为datatable,MSDN有一个示例类可以反映出任何类型并执行转换。Please Read this link

票数 2
EN

Stack Overflow用户

发布于 2014-04-08 16:35:12

如果你有一个有很多列的DataTable

代码语言:javascript
复制
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

代码语言:javascript
复制
var nameOnlyTable = new DataView(dt).ToTable(false, new []{"Name"});

不需要LINQ。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22909327

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档