.net - 无法将 LINQ 结果复制到数据表中

标签 .net vb.net linq

下面是我的 LINQ 查询:

Dim JoinedResult = From t1 In temp.AsEnumerable() _
                   Group Join t2 In tbCity.AsEnumerable() _
                   On t1.Field(Of String)("City") Equals t2.Field(Of String)("city_name") _
                   Into RightTableResults = Group _
                   From t In RightTableResults.DefaultIfEmpty
                   Select New With 
                   {
                        .ID = t1.Item("ID"), 
                        .CID = If(t Is Nothing, 
                        1,  
                        t.Item("city_gid"))
                   }  

如何将值从“JoinedResult”复制到数据表?

注意:
  • 我没有收到 JoinedResult.CopyToDataTable()
  • 我不想使用循环
  • 最佳答案

    CopyToDataTable 自 .NET 3.5 以来已经存在。但问题是你想创建一个 DataTable “从头开始”来自匿名类型。那行不通。
    CopyToDataTableIEnumerable<DataRow> 的扩展只有。所以你要么选择 DataRow来自您的加入 DataTables :

    Dim query =  From t1 In temp.AsEnumerable() _
                 Group Join t2 In tbCity.AsEnumerable() _
                 On t1.Field(Of String)("City") Equals t2.Field(Of String)("city_name") Into RightTableResults = Group 
                 From t In RightTableResults.DefaultIfEmpty
                 Select t1
    Dim table = query.CopyToDataTable()
    

    或使用 this ObjectShredder 它使用反射,因此不是最有效的方式( C# implementation )。

    除此之外,你为什么需要DataTable根本?您还可以使用匿名类型作为 DataSource 或创建一个自定义类,您可以从查询结果中对其进行初始化。

    编辑 : 您也可以创建自定义 DataTable使用您需要的列,例如(来自您的评论):
    Dim tbTemp As New DataTable
    tbTemp.Columns.Add("ID")
    tbTemp.Columns.Add("CID")
    
    Dim query = From t1 In temp.AsEnumerable()
                Group Join t2 In tbCity.AsEnumerable() On
                t1.Field(Of String)("City") Equals t2.Field(Of String)("city_name")
                Into RightTableResults = Group
                From t In RightTableResults.DefaultIfEmpty
                Select New With {.ID = t1.Item("ID"), .City_Gid = t.Item("city_gid")}
    For Each x In query
        tbTemp.Rows.Add(x.ID, x.City_Gid)
    Next
    

    关于.net - 无法将 LINQ 结果复制到数据表中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14578235/

    相关文章:

    database - 更新数据库的问题

    c# - 通过 Id 和名称获取下一个和上一个 sql 行,EF?

    c# - Linq 帮助 - 子查询给出空指针异常

    c# - 代码中的表格布局被认为是错误的原因是什么?

    .net - 如何计算 "kleinster gemeinsamer Nenner"最后公分母

    vb.net - 为什么使用公共(public)属性而不是函数来公开自定义集合<T>

    vb.net - HtmlAgilityPack 获取页面标题和 H1 标签

    c# - Linq检查数据表中是否存在数据行

    c# - 立即取消任务

    c# - .net 无法加载文件或程序集 MySql.Data。强名称验证失败 (0x8013141A)