【问题标题】:Create columns in Linq By using Looping使用循环在 Linq 中创建列
【发布时间】:2019-12-06 02:27:04
【问题描述】:

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

是否无论如何都要循环遍历列以在 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 和 dt2 中删除了列
  • 我通过分配新的字符串数组更新了代码。你能试试这个新方法吗?

标签: c# linq jointable


【解决方案1】:

我认为您仍然需要转换为 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())
                  )

【讨论】:

  • 左连接列怎么样?我需要 dt1 的原始列和 leftjoin 的列吗? @@
  • 但是 joinDt1AndDt2 实际上只是有 dt2 列不包括 dt1 列
  • 你想要 dt1 和 dt2 列吗?
  • 我进行了编辑以获取 dt1 和 dt2 中的所有列,这是您所期望的吗?
  • 是的。我想这就是我想要的。但是它给了我另一个错误,例如输入字符串的格式不正确。无法将 存储在 id 列中。预期类型是 Int64。我认为在将其更改为动态列之前,我已经放置了类似 dr1.Field("id") 的内容来解决这个类似的问题。那么我怎样才能在这个 linq 中做同样的事情呢?
【解决方案2】:

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

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

【讨论】:

  • dt1.Columns 没有 .Select 选项
  • dt1.列。 AsEnumerable().
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-17
  • 2020-07-13
  • 2015-06-23
  • 2022-01-02
相关资源
最近更新 更多