我有一個存儲過程返回一個選擇 這樣的:地圖數據表上課,變更類型爲int要枚舉
select name , family , sex from person
我有一個名爲一類人是這樣的:
public class person {
string name {get;set;}
string family {get;set;}
GenderEnum sex {get;set;}
}
和我有一個名爲GenderEnum像這樣的枚舉:
Enum GenderEnum
{
Man = 1 ,
Woman = 2 ,
}
我想轉換我的數據表t o人的IList。
我的問題是:當我想將性別列轉換爲性別字段時,我將大多數類型的int轉換爲GenderEnum。
不要忘記,我最有一個通用的方法來轉換所有的DataTable到所有類 和這種方法最認識到每個屬性都有枚舉類型。
這種方法來繪製所有列的所有屬性根據名稱
我寫這篇文章的方法,但這種並非適用於所有類型的工作。
exapmle:如果我的列是int,並且我的屬性是嚴格的並且名稱相同,則map不起作用。
public List<T> ConvertTo<T>(DataTable datatable) where T : new()
{
var temp = new List<T>();
try
{
var columnsNames = (from DataColumn dataColumn in datatable.Columns select dataColumn.ColumnName).ToList();
temp = datatable.AsEnumerable().ToList().ConvertAll<T>(row => GetObject<T>(row, columnsNames));
return temp;
}
catch
{
return temp;
}
}
private T GetObject<T>(DataRow row, List<string> columnsName) where T : new()
{
T obj = new T();
try
{
string columnname = "";
PropertyInfo[] Properties = typeof(T).GetProperties();
foreach (PropertyInfo objProperty in Properties)
{
columnname = columnsName.Find(name => name.ToLower() == objProperty.Name.ToLower());
if (!string.IsNullOrEmpty(columnname))
{
var value = row[columnname];
if (!string.IsNullOrEmpty(value.ToString()))
{
Type type;
type = Nullable.GetUnderlyingType(objProperty.PropertyType) ?? objProperty.PropertyType;
objProperty.SetValue(obj,
type == value.GetType()
? Convert.ChangeType(value, type)
: System.Enum.ToObject(type, value), null);
}
}
}
return obj;
}
catch (Exception exception)
{
return obj;
}
}
答案正是我的問題解決。 – 2013-03-27 20:25:06
我很高興能幫上忙。 – 2013-03-27 20:40:29