2014-09-29 45 views
0

我有一個類C#許多從數據表或一個反射的DataRow

class Person { 

public string Name {get; set;} 

public int Age {get; set;} 

public string Phone {get; set;} 

// many other properties 

} 

數據爲此人來自一個DataRow,問題是,有不是一個一對一映射,如圖所示如下: -

public DataRow doMapping() 
{ 
DataRow row = new DataRow(); 
FillDataInto(row); 
Person p1 = new Person(); 

p1.Name = row["FirstName"] + " " + row["LastName"]; 
p1.Age = row["Age"]; 
p1.Phone = row["Phone"] + " " + row["Extension"]; 
p1.Prop1 = row["Prop1"]; 
p1.PropXY = row["PropXY"]; 

// many others ... 

}

如圖所示的一些特性來從我的數據庫的不同列。我需要創造一個反射功能,以行屬性映射到Person

目前,我有以下一些幫助,但是對於一個一對一的映射工作,
(如上面的例子中,Age): -

public DataRow doMapping(){ 

DataRow row = new DataRow(); 
FillDataInto(row); 

Person p1 = new Person(); 
Type type = Person.GetType(); 
PropertyInfo[] props = type.getProperties(); 

foreach(PropertyInfo p in props) 
{ 
    string name = p.Name; 
    p.SetValue(p1, row[name]); 
} 
} 

我只是需要改進這個來處理前面提到的情況。
(我可以稍後清理,一旦我理解了核心邏輯)

回答

0

您可以在dataTable中擁有Name和Phone所需的列。

爲Name和Phone添加兩個新列,並將其定義爲與用於屬性的邏輯相同。 如果要從數據庫Select語句加載此數據表,而不是在您的SQL語句本身中爲名稱和電話添加兩個新列,其邏輯與用於屬性的邏輯相同。

然後您的一對一的屬性映射的實施可能工作。

相關問題