我已经创建了一个数据集-我如何通过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;
}
}
可以使用DataTableExtensions。CopyToDataTable方法来解决您的问题。
有关其他信息,请查看此MSDN主题
从查询创建数据表
LINQ查询数据集
你可以使用这个函数将你的列表转换成数据表,然后用你的数据表填充你的数据集
这样调用
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;
}