Linq结果到数据集

本文关键字:数据集 结果 Linq | 更新日期: 2023-09-27 18:27:58

我将实体框架与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);
    }

Linq结果到数据集

尝试使用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);
}

您可以使用反射编写自己的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;
    }