ivanl 2023-03-27 10:31 采纳率: 0%
浏览 29

请问如何直接把Linq查询结果直接转换为datatable?

请问如何直接把Linq查询结果直接转换为datatable? 微软有内置函数吗?或者第三方易用的类库?

例如:

var queryPartList = (from Part_row in PartDB select Part_row);

DataTable = dtPartList = queryPartList.To???? 请问怎样转为datatable?

  • 写回答

3条回答 默认 最新

  • 海洋 之心 2022年度博客之星人工智能领域TOP 1 2023-03-27 10:39
    关注

    在 .NET Framework 中,可以使用以下方式将 LINQ 查询结果直接转换为 DataTable:

    var queryPartList = from Part_row in PartDB select Part_row;
    
    DataTable dtPartList = new DataTable();
    dtPartList.Columns.AddRange(queryPartList.First().GetType().GetProperties()
        .Select(p => new DataColumn(p.Name, p.PropertyType)).ToArray());
    
    queryPartList.ToList().ForEach(r => dtPartList.Rows.Add(
        queryPartList.First().GetType().GetProperties()
            .Select(p => p.GetValue(r, null)).ToArray()));
    

    上述代码中,使用了 DataTable 的构造函数来创建一个新的 DataTable 对象。然后,使用 LINQ 查询中的第一个元素的属性来创建 DataTable 的列,使用 ToArray() 方法将它们转换为 DataColumn 数组。

    接下来,使用 ToList() 方法将整个查询结果转换为 List,并使用 ForEach() 方法遍历 List 中的每一行,并将它们添加到 DataTable 中。

    需要注意的是,上述方式可以将任意类型的 LINQ 查询结果直接转换为 DataTable,但是性能可能不如手动创建 DataTable,因为它需要使用反射来获取属性信息。如果数据量较大,建议手动创建 DataTable。

    除了手动转换外,也可以使用第三方类库,如 LINQ to DataTable,它提供了一种更简单的方式将 LINQ 查询结果转换为 DataTable。可以通过 NuGet 包管理器安装该类库,然后使用下面的代码:

    var queryPartList = from Part_row in PartDB select Part_row;
    
    DataTable dtPartList = queryPartList.CopyToDataTable();
    

    上述代码中,使用了 CopyToDataTable() 方法将 LINQ 查询结果直接转换为 DataTable。需要注意的是,该方法只能用于查询结果中的所有元素类型相同的情况。如果查询结果中包含不同类型的元素,会抛出异常。

    评论

报告相同问题?

问题事件

  • 创建了问题 3月27日