我执行一个存储过程,它返回动态数据透视图的结果。由于它是动态数据透视表,我无法估计结果标头的值。我的查询返回正常,我不确定此标题列的映射是否在我的对象中的属性,然后发送到excel。我应该尝试在LINQ中编写查询吗?我需要将以下格式的SQL结果呈现为excel:
在下面的TSBNumber是一个属性,SYstemXY是一个名为SystemFullName的属性的 VALUE ,其值是否在标题和日期时间中显示?是一个名为CLosedDate的属性
从SQL返回的示例数据:
**TSBNumber** SystemXY SystemBB SystemTT
asdas 1/1/2013
1231 1/1/2014
12312 1/1/2013
ASAWS 1/1/2013
awsdS 1/1/2013
执行存储过程
return db.Database.SqlQuery<ServiceTsbExportDataRow>("[dbo].[spExportServiceTSB] @parm1, @parm2, @parm3, @parm4, @parm5",
new SqlParameter("parm1", StartDate),
new SqlParameter("parm2", EndDate),
new SqlParameter("parm3", UserRoleID),
new SqlParameter("parm4", SelectedSystemIDs),
new SqlParameter("parm5", SelectedTsbIDs)
).ToList().ToHTMLTable();
实体映射属性 ServiceTsbExportDataRow
public class ServiceTsbExportDataRow
{
//This property gets displayd fine since i know the mapping
public string TSBNumber { get; set; }
//Now How do I display my SystemFullName property? string array?
}
TOHTML表格方法
public static string ToHTMLTable<T>(this IList<T> data)
{
PropertyDescriptorCollection props =
TypeDescriptor.GetProperties(typeof(T));
StringBuilder builder = new StringBuilder();
builder.Append("<table border=\"1\">");
builder.Append("<tr>");
for (int i = 0; i < props.Count; i++)
{
builder.Append("<td>");
PropertyDescriptor prop = props[i];
builder.Append(prop.Name);
builder.Append("</td>");
}
builder.Append("</tr>");
object[] values = new object[props.Count];
foreach (T item in data)
{
builder.Append("<tr>");
for (int i = 0; i < values.Length; i++)
{
builder.Append("<td>");
builder.Append(props[i].GetValue(item));
builder.Append("</td>");
}
builder.Append("</tr>");
}
builder.Append("</table>");
return "<html><body>" + builder.ToString() + "</body></html";
}
最后发送到excel
ExcelHelpers.ExportToExcel(context.HttpContext, typeName, htmlTable);