【问题标题】:Linq results to datasetLinq 结果到数据集
【发布时间】:2013-08-16 08:41:21
【问题描述】:

我使用实体框架和 Linq 将我的数据从数据库中取出。 我想将这些数据下载到 Excel 中。 ExcelLibrary 使用数据集。 是否可以在数据集中获取 Linq 数据,以便我可以轻松获取 excel 中的数据?

我试过了,当然这不起作用。

    protected void btnExcelCheckListDownload_Click(object sender, EventArgs e)
    {
        DataSet dsTest = new DataSet();
        var db = new BillingEntities();
        var query = (from u in db.v_Checklist select u).AsQueryable();
        dsTest =  (DataSet)query.Select(u => u.NCR_ID).Distinct();
        ExcelLibrary.DataSetHelper.CreateWorkbook("MyExcelFile.xls", dsTest);
    }

【问题讨论】:

  • 你试过用System.Data.DataTableExtensions.CopyToDataTable()
  • 我试过:var query = from u in db.v_Checklist select u; DataTable 表 = query.CopyToDataTable(); CopyToDataTable 不存在。因为查询不是数据行...

标签: c# linq datatable dataset excellibrary


【解决方案1】:

尝试使用 CopyToDataTable

protected void btnExcelCheckListDownload_Click(object sender, EventArgs e)
{
    DataSet dsTest = new DataSet();
    var db = new BillingEntities();
    var query = (from u in db.v_Checklist select u).AsQueryable();
    DataTable dt =  query.CopyToDataTable();
    dsTest.Tables.Add(dt);
    ExcelLibrary.DataSetHelper.CreateWorkbook("MyExcelFile.xls", dsTest);
}

【讨论】:

  • 我在尝试 copytodatatable 时收到此错误。类型“x.v_Checklist”不能用作泛型类型或方法“System.Data.DataTableExtensions.CopyToDataTable 中的类型参数“T”
【解决方案2】:

您可以使用反射编写自己的 ToDatatable 扩展。类似于以下的东西。这只是一个示例,您可能希望根据需要对其进行扩展。

public static class ConvertToDatatable
{
    public static DataTable ToDataTable<T>(this IEnumerable<T> enumerable)
    {
        if (enumerable == null) throw new ArgumentException("enumerable");
        var dt = new DataTable();
        var es = enumerable as List<T> ?? enumerable.ToList();
        var first = es.First();
        if (first != null)
        {
            var props = first.GetType().GetProperties();
            foreach (var propertyInfo in props)
            {
                if (!propertyInfo.PropertyType.IsClass || propertyInfo.PropertyType.Name.Equals("String"))
                {
                    dt.Columns.Add(new DataColumn(propertyInfo.Name));
                }
            }
        }

        foreach (var e in es)
        {
            var props = e.GetType().GetProperties();
            DataRow dr = dt.NewRow();
            dt.Rows.Add(dr);
            foreach (var propertyInfo in props)
            {
                if (!propertyInfo.PropertyType.IsClass || propertyInfo.PropertyType.Name.Equals("String"))
                {
                    dr[propertyInfo.Name] = propertyInfo.GetValue(e);
                }
            }
        }

        return dt;
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-09-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-08
    • 2021-10-31
    • 1970-01-01
    相关资源
    最近更新 更多