2012-01-06 85 views
1

我有以下情形在C#業務移調數據對象

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 
  • 列標頭是值以上數據基於ClassID(ClassCode)的名稱(類別)和縮寫(類)
  • 值是Code(ClassCode)和Description(ClassCode)的連接 - Map是Code goe s到縮寫列和描述轉到名稱列
  • 當您想在運行時創建屬性時,DataTable是合適的 - 任何其他選項都將受到讚賞。

    請幫忙!!

+0

你是說你不希望使用數據表的呢?對我來說,這聽起來像是一個明顯的選擇... – 2012-01-06 08:46:03

回答

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); 
+0

感謝Ole,並且對於遲到的回覆感到抱歉。上述問題是將一組更大的對象層次轉換爲平面結構以將其綁定到網格的一部分 – 2012-01-17 08:28:44