【问题标题】:Insert LINQ Query Results Into DataTable将 LINQ 查询结果插入 DataTable
【发布时间】:2020-01-28 13:45:25
【问题描述】:

我正在使用 LINQ 查询从链接的实体框架表中获取数据。如何获取存储结果的变量并创建 DataTable?

在下面的代码中,如何为变量empInfo 保存的所有结果创建一个DataTable?

var empInfo = (from import in db.HmspreadsheetImports
join hpp in db.Hppings on import.VText equals hpp.HAu
where import.importDT >= DateTIme.Parse(currDate)
select new Label {
    LastName = hpp.lastname,
    FirstName = hpp.firstname,
    Address1 = hpp.Address1,
    City = import.city,
    State = import.state
}).ToList();

【问题讨论】:

    标签: c# linq datatable


    【解决方案1】:

    您可以使用此扩展方法将IList 转换为DataTable

    public static DataTable ToDataTable<T>(this IList<T> data)
    {
        PropertyDescriptorCollection props =
            TypeDescriptor.GetProperties(typeof(T));
        DataTable table = new DataTable("Results");
        for (int i = 0; i < props.Count; i++)
        {
            PropertyDescriptor prop = props[i];
            table.Columns.Add(prop.Name,  Nullable.GetUnderlyingType(prop.PropertyType) ?? prop.PropertyType);
        }
        object[] values = new object[props.Count];
        foreach (T item in data)
        {
            for (int i = 0; i < values.Length; i++)
            {
                values[i] = props[i].GetValue(item);
            }
            table.Rows.Add(values);
        }
        return table;
    }
    

    然后像这样实现:

    DataTable dtempInfo = empInfo.ToDataTable<Label>();
    

    【讨论】:

    • 如何调用这个扩展方法?
    • 我得到一个构建错误,'List
    • 请确保将扩展方法的使用命名空间添加到您尝试使用的类ToDataTable&lt;Labe&gt;()
    • 当我运行代码时,我得到一个 System.NotSupportedException: 'DataSet' does not support System.Nullable'
    • 更新了我对 Nullable 支持的回答。请检查
    【解决方案2】:

    MoreLINQ 可通过NuGet package 获得,并提供ToDataTable 扩展方法:

    将序列中的元素作为给定(或新)对象的行添加(DataTable),并带有一组指定哪些成员(属性或字段)的lambda表达式序列中的每个元素都将提供列值。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-03-23
      • 1970-01-01
      • 2014-11-08
      • 2014-10-20
      • 2010-09-05
      • 1970-01-01
      • 2015-11-12
      相关资源
      最近更新 更多