【问题标题】:LINQ - join 2 datatables - wildcardLINQ - 加入 2 个数据表 - 通配符
【发布时间】:2009-03-17 21:06:00
【问题描述】:

我正在使用 LINQ 连接 2 个数据表。我试图只取回 dtTable2 中的 1 个字段和 dtTable1 中的所有字段。当这段代码执行时,我有两列。第一列包含来自 dtTable2.field2 的值,第二列包含值“System.Data.DataRow”。我知道如果我明确指定 dtTable1 中的列,我将得到我需要的结果。是否可以指定通配符来获取 dtTable1 中的所有列?

Dim results = _
   From r In dtTable1.AsEnumerable _
   Join c In dtTable2.AsEnumerable _
   On c.Field1 Equals r.Field1 _
   Select c.field2, r

Datagridview.datasource = results.ToList

【问题讨论】:

    标签: linq join datatable


    【解决方案1】:

    没有。您需要列出所需的属性或引用行对象中的属性。请注意,如果这是一个强类型行,您可以将其强制转换为类型并直接在代码中使用这些字段。

    Dim results = _
       From r In dtTable1.AsEnumerable _
       Join c In dtTable2.AsEnumerable _
       On c.Field1 Equals r.Field1 _
       Select c.field2, r.Field1, r.Field3, r.Field4
    
    Datagridview.datasource = results.ToList
    

    【讨论】:

      【解决方案2】:

      这有点尴尬,但是您可以使用 List 对象和 Concat 来做到这一点。我对 VB 不够熟悉,无法为您提供正确的语法,但这里是 C#

      var results = from r in dtTable1.AsEnumerable()
                    join c in dtTable2.AsEnumerable() on c.Field1 equals r.Field1
                    select new List<object>(r.ItemArray).Concat(new List<object>() { c.Field2 })
      datagridview.DataSource = results;
      

      【讨论】:

        猜你喜欢
        • 2011-07-18
        • 2016-03-24
        • 2012-09-11
        • 1970-01-01
        • 1970-01-01
        • 2020-07-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多