public class Employee {
public string Name { get; set; }
public string Department { get; set; }
public string Function { get; set; }
public decimal Salary { get; set; }
}
public dynamic consolidado()
{
string fechastring = String.Format("{0:MM/dd/yyyy}", "01/03/2016");
DateTime fechagenda = Convert.ToDateTime(fechastring);
string fechastring2 = String.Format("{0:MM/dd/yyyy}", "07/03/2016");
DateTime fechagenda2 = Convert.ToDateTime(fechastring2);
_ctx.Database.CommandTimeout = 1000;
var data = (from p in _ctx.Proyecto
join movequi in _ctx.MovimientoEquipo on p.IdTarea equals movequi.IdTarea into movequi_join
from movequi in movequi_join.DefaultIfEmpty()
join movmat in _ctx.MovimientoMaterial on p.IdTarea equals movmat.IdTarea into movmat_join
from movmat in movmat_join.DefaultIfEmpty()
where
p.segmento == 2 &&
p.CodigoActividad.IdArea == 4 &&
(System.Data.Entity.DbFunctions.TruncateTime(p.FechaAgenda) >= fechagenda.Date && System.Data.Entity.DbFunctions.TruncateTime(p.FechaAgenda) <= fechagenda2.Date)
select new
{
proyecto = p.idProyecto,
estado = p.idEstado,
CodigoxxxEquipo = (movequi.TipoEquipo.xxxx?? "NA"),
Serial = (movequi.Serial ?? ""),
Codigoxxxx = (movmat.Material.xxxx?? "NA"),
Cantidad = ((System.Int32?)movmat.Cantidad ?? (System.Int32?)0),
}).ToList();
var proyecto = from d in data
group d by d.proyecto into grp
select new
{
ProyectoID = (int)grp.Key,
Equipos = grp.Select(e => new { e.CodigoxxxxEquipo, e.Serial, e.Codigoxxxx, e.Cantidad }).ToList()
};
var codequipo = (from p in _ctx.Proyecto
join movequi in _ctx.MovimientoEquipo on p.IdTarea equals movequi.IdTarea
where
p.segmento == 2 &&
p.CodigoActividad.IdArea == 4 &&
(System.Data.Entity.DbFunctions.TruncateTime(p.FechaAgenda) >= fechagenda.Date && System.Data.Entity.DbFunctions.TruncateTime(p.FechaAgenda) <= fechagenda2.Date)
select new
{
movequi.TipoEquipo.Codigoxxxx
}).Distinct();
var codmaterial = (from p in _ctx.Proyecto
join movmat in _ctx.MovimientoMaterial on p.IdTarea equals movmat.IdTarea
where
p.segmento == 2 &&
p.CodigoActividad.IdArea == 4 &&
(System.Data.Entity.DbFunctions.TruncateTime(p.FechaAgenda) >= fechagenda.Date && System.Data.Entity.DbFunctions.TruncateTime(p.FechaAgenda) <= fechagenda2.Date)
select new
{
movmat.Material.Codigoxxxx
}).Distinct();
DataTable dt = new DataTable();
/*for static cols*/
dt.Columns.Add("Proyecto_ID");
/*for dynamic cols*/
foreach (var subject in codequipo)
{
dt.Columns.Add(subject.Codigoxxxx.ToString() +"-EquipoInst" );
}
foreach (var subject in codmaterial)
{
dt.Columns.Add(subject.Codigoxxxx.ToString() + "-MaterialInst");
}
/*pivot the data into a new datatable*/
foreach (var g in proyecto)
{
DataRow dr = dt.NewRow();
dr["Proyecto_ID"] = g.ProyectoID;
foreach (var mark in g.Equipos)
{
if(mark.CodigoxxxxEquipo !="NA"){
dr[mark.CodigoxxxxEquipo + "-EquipoInst"] = mark.Serial;
}
if (mark.Codigoxxxx != "NA")
{
dr[mark.Codigoxxxx + "-MaterialInst"] = mark.Cantidad;
}
}
dt.Rows.Add(dr);
}
return dt;
}
您可以应用一种扩展方法
枢轴延伸
正如您将从实体中看到的那样
您可以选择要更改顺序的属性
或者选择另一个属性进行透视
这样枢轴对我有用,我仍然需要从 mvc 客户端导出到 excel 到 web api。