C# linq在复制到新数据表时排除某些列
我正在尝试使用OpenXML和LoadfromDataTable创建excel工作表。如果有更好的功能,我就不喜欢这个功能。我试图排除datatable列,以便它们不会显示在excel工作表中。例如,我有一个列为“ID”、“Name”和“Address”的数据表 我试图做的是创建一个新的Datatable,其中只包含列名称、地址和排除ID 我有一个linq查询,它获取我希望在新数据表中看到的列列表,如下所示:C# linq在复制到新数据表时排除某些列,c#,linq,C#,Linq,我正在尝试使用OpenXML和LoadfromDataTable创建excel工作表。如果有更好的功能,我就不喜欢这个功能。我试图排除datatable列,以便它们不会显示在excel工作表中。例如,我有一个列为“ID”、“Name”和“Address”的数据表 我试图做的是创建一个新的Datatable,其中只包含列名称、地址和排除ID 我有一个linq查询,它获取我希望在新数据表中看到的列列表,如下所示: var columns = dt1.Columns.Cast<DataColum
var columns = dt1.Columns.Cast<DataColumn>().Where(c => c.ColumnName != "ID").ToList();
var columns=dt1.columns.Cast()。其中(c=>c.ColumnName!=“ID”).ToList();
我试图找出如何使用该列表创建一个新的datatable,只包含列表中的那些列。从datatable中,使用只能选择少数列。选择
var result = from a in new DataContext().DataColumn
where a.ColumnName != "ID"
select new {a.NotForExcel, a.ExcelColumn1, a.ExcelColumn2 };
var ExcelList = result.AsEnumerable()
.Select(o => new DataColumn {
Column1 = o.ExcelColumn1,
Column2 = o.ExcelColumn2
}).ToList();
有一种简单的方法可以做到这一点,即创建定义的
数据视图的新数据表。要显示示例,让我们创建表1
:
DataTable table1 = new DataTable();
table1.Columns.Add("ID");
table1.Columns.Add("Value1");
table1.Columns.Add("Value2");
table1.Rows.Add(new object[] { 0, "zero", "nothing" });
table1.Rows.Add(new object[] { 1, "one", "single" });
现在,您需要通过过滤table1
中的列来指定希望在新的table2
中包含的列。在我们的示例中,我们需要除“ID”之外的所有列:
结果表2
如下所示
Value1 | Value2
-------|--------
zero | nothing
one | single
你能更具体一点,提供更多细节吗?我不明白你所说的“如何使用linq从“column”变量创建一个新的datatable”是什么意思。我相信你会在这里找到答案:我知道我可以这样做,但我正在尝试排除2列并选择10+来创建一个新的datatable of dataCheck out。
string[] columns = table1.Columns.OfType<DataColumn>()
.Where(c => c.ColumnName != "ID")
.Select(c => c.ColumnName).ToArray();
DataTable table2 = new DataView(table1).ToTable(false, columns);
Value1 | Value2
-------|--------
zero | nothing
one | single