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# linq在复制到新数据表时排除某些列_C#_Linq - Fatal编程技术网

C# linq在复制到新数据表时排除某些列

C# linq在复制到新数据表时排除某些列,c#,linq,C#,Linq,我正在尝试使用OpenXML和LoadfromDataTable创建excel工作表。如果有更好的功能,我就不喜欢这个功能。我试图排除datatable列,以便它们不会显示在excel工作表中。例如,我有一个列为“ID”、“Name”和“Address”的数据表 我试图做的是创建一个新的Datatable,其中只包含列名称、地址和排除ID 我有一个linq查询,它获取我希望在新数据表中看到的列列表,如下所示: var columns = dt1.Columns.Cast<DataColum

我正在尝试使用OpenXML和LoadfromDataTable创建excel工作表。如果有更好的功能,我就不喜欢这个功能。我试图排除datatable列,以便它们不会显示在excel工作表中。例如,我有一个列为“ID”、“Name”和“Address”的数据表

我试图做的是创建一个新的Datatable,其中只包含列名称、地址和排除ID

我有一个linq查询,它获取我希望在新数据表中看到的列列表,如下所示:

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