使用循环在 Linq 中创建列

Create columns in Linq By using Looping

我使用 linq 左连接另一个数据 table,这使我需要使用 Linq 为新的左连接数据创建列 table。

是否要循环遍历列以在 linq 中自动创建它?

 var Dt1JoinDt2 = from dr1 in dt1.AsEnumerable()
                  join dr2 in dt2.AsEnumerable()
                  on dr1.Field<Int64>(id1) equals dr2.Field<Int64>(id2) into joinDt1AndDt2
                  from leftjoin in joinDt1AndDt2.DefaultIfEmpty()
                  select dtJoinedTable.LoadDataRow(new object[]
                  {
                   dr1.Field<String>("id"),
                   dr1.Field<Int64?>("col_sample"),
                   dr1.Field<String>("col2"),
                   dr1.Field<String>("colName"),
                   dr1.Field<String>("columns"),
                   dr1.Field<String>("col_no"),
                   ......

这是我想使用循环创建列的代码部分

                   dr1.Field<String>("id"),
                   dr1.Field<Int64?>("col_sample"),
                   dr1.Field<String>("col2"),
                   dr1.Field<String>("colName"),
                   dr1.Field<String>("columns"),
                   dr1.Field<String>("col_no"),
                   ......

是不是要用Linq或者C#或者其他编码方式来实现???

我手头没有电脑,但你可以试试:

dt1.Columns.AsEnumerable().Select(column => dr1[column.Name]).ToArray()

我认为您仍然需要转换为 DataColumn

using System.Data

var Dt1JoinDt2 = from dr1 in dt1.AsEnumerable()
                  join dr2 in dt2.AsEnumerable()
                  on dr1.Field<Int64>(id1) equals dr2.Field<Int64>(id2) into joinDt1AndDt2
                  from leftjoin in joinDt1AndDt2.DefaultIfEmpty()
                  select dtJoinedTable.LoadDataRow(
                   (from dc1 in dt1.Columns.Cast<DataColumn>() select dc1.ColumnName).ToArray() // cast to DataColumn, use joinDt1AndDt2
                  .Union((from dc2 in dt2.Columns.Cast<DataColumn> select dc2.ColumnName).ToArray())
                  )