可以将动态sql pivot字段映射到实体,或者在LINQ中编写透视查询

时间:2014-10-02 04:17:28

标签: c# asp.net entity-framework asp.net-mvc-3

我执行一个存储过程,它返回动态数据透视图的结果。由于它是动态数据透视表,我无法估计结果标头的值。我的查询返回正常,我不确定此标题列的映射是否在我的对象中的属性,然后发送到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);

0 个答案:

没有答案