如何从LINQ填充数据集

时间:2014-03-08 22:01:29

标签: c# asp.net-mvc linq crystal-reports dataset

我创建了一个数据集 - 如何通过LINQ查询使用数据库中的数据填充此数据集? 我甚至不知道我做得对。我想将此数据集用作报表的数据源。

这是我的代码:

    public ActionResult Report()
    {
        int OrderId = GetLastOrderId();
      DataClasses1DataContext db = new DataClasses1DataContext();
  var t1 = (from p in db.Varors
                  join
                      op in db.OrderVarors on p.id equals op.IdVara
                  where op.IdOrder == OrderId
                  select new
                  {
                      p.Name,
                      p.details
                  }).ToList();

        MYDATASET ds = new MYDATASET();

       // Somthing LIKE
         ds.add(t1);

            ReportDocument rd = new ReportDocument();
            rd.Load(Path.Combine(Server.MapPath("~/Repport/CrystalReport1.rpt")));
            rd.SetDataSource(t1);

            Response.Buffer = false;
            Response.ClearContent();
            Response.ClearHeaders();


            try
            {
                Stream stream = rd.ExportToStream(CrystalDecisions.Shared.ExportFormatType.PortableDocFormat);
                stream.Seek(0, SeekOrigin.Begin);
                return File(stream, "application/pdf", "EverestList.pdf");
            }
            catch (Exception ex)
            {
                throw;
            }
    }

2 个答案:

答案 0 :(得分:2)

您可以使用DataTableExtensions.CopyToDataTable方法解决问题。

有关其他信息,请查看此MSDN主题

Creating a DataTable From a Query

Queries in LINQ to DataSet

答案 1 :(得分:1)

您可以使用此功能将列表转换为DataTable,然后使用DataTable填充DataSet

这样称呼

DataTable dt = new DataTable();
dt = ConvertToDataTable(My_List);  

转换为DataTable

public DataTable ConvertToDataTable<T>(IList<T> data)
        {
            PropertyDescriptorCollection properties = TypeDescriptor.GetProperties(typeof(T));
            DataTable table = new DataTable();
            foreach (PropertyDescriptor prop in properties)
                table.Columns.Add(prop.Name, Nullable.GetUnderlyingType(prop.PropertyType) ?? prop.PropertyType);
            foreach (T item in data)
            {
                DataRow row = table.NewRow();
                foreach (PropertyDescriptor prop in properties)
                    row[prop.Name] = prop.GetValue(item) ?? DBNull.Value;
                table.Rows.Add(row);
            }
            return table;
        }