我有以下情况
List<Class> Classes = new List<Class>();
Class c1 = new Class() { ClassID = 1, Name = "Class1", Abbreviation = "CLS1" }; Classes.Add(c1);
Class c2 = new Class() { ClassID = 2, Name = "Class2", Abbreviation = "CLS2" }; Classes.Add(c2);
Class c3 = new Class() { ClassID = 3, Name = "Class3", Abbreviation = "CLS3" }; Classes.Add(c3);
List<ClassCode> ClassCodes = new List<ClassCode>();
ClassCode cc1 = new ClassCode() { ClassID = 1, ClassCodeID = 1, Code = "CC1", Description = "CCD1", Class = c1 }; ClassCodes.Add(cc1);
ClassCode cc2 = new ClassCode() { ClassID = 1, ClassCodeID = 2, Code = "CC2", Description = "CCD2", Class = c1 }; ClassCodes.Add(cc2);
ClassCode cc3 = new ClassCode() { ClassID = 2, ClassCodeID = 3, Code = "CC3", Description = "CCD3", Class = c2 }; ClassCodes.Add(cc3);
ClassCode cc4 = new ClassCode() { ClassID = 2, ClassCodeID = 4, Code = "CC4", Description = "CCD4", Class = c2 }; ClassCodes.Add(cc4);
ClassCode cc5 = new ClassCode() { ClassID = 3, ClassCodeID = 5, Code = "CC5", Description = "CCD5", Class = c3 }; ClassCodes.Add(cc5);
ClassCode cc6 = new ClassCode() { ClassID = 3, ClassCodeID = 6, Code = "CC6", Description = "CCD6", Class = c3 }; ClassCodes.Add(cc6);
我正在尝试使用Linq以下面的格式转换上述数据
Class1 | CLS1 | Class2 | CLS2 | Class3 | CLS3 - Columns
---------------------------------------------------------------------------
CCD1CCD2 | CC1CC2 | CCD3CCD4 | CC3CC4 | CCD5CCD6 | CC4CC5 - Row
当您想在运行时创建属性时,DataTable非常合适 - 任何其他选项都将受到赞赏。
请帮助!!
答案 0 :(得分:3)
您没有解释为什么要这样做。 可能还有其他方法可以达到你想要的效果。
无论如何,以下代码应该有效。 它产生了一个DataTable,我认为它非常适合这个:
var dt = new System.Data.DataTable("Transpose");
foreach (var c in Classes)
{
var dc1 = new System.Data.DataColumn(c.Name, typeof(string));
var dc2 = new System.Data.DataColumn(c.Abbreviation, typeof(string));
dc1.ExtendedProperties.Add("ID", c.ClassID);
dc2.ExtendedProperties.Add("ID", c.ClassID);
dt.Columns.AddRange(new System.Data.DataColumn[] { dc1, dc2 } );
}
var dr = dt.NewRow();
for (int i = 0; i < dt.Columns.Count; i++)
{
var col = dt.Columns[i];
dr[i++] = ClassCodes.Where(cc => cc.ClassID == (int)col.ExtendedProperties["ID"])
.Select(cc => cc.Description)
.Aggregate((first, next) => first + next);
col = dt.Columns[i];
dr[i] = ClassCodes.Where(cc => cc.ClassID == (int)col.ExtendedProperties["ID"])
.Select(cc => cc.Code)
.Aggregate((first, next) => first + next);
}
dt.Rows.Add(dr);