目前項目當中存有 .NET Framework 和 .NET Core 兩種類型的項目,但是都需要進行容器化將其分別部署在 Windows 集群和 Linux 集群當中。在 WCF 進行容器化的時候,遇到了以下幾個問題: 1. 某些服務使用到了 WSHttpBinding 保護服務安全,要在容器里... ...
網上有不少List<T> 轉 DataTable 的代碼 ,但都是要指定類型的,如: ListToDT<T>(List<T> xxxx) 這樣的,這樣用總覺得有點彆扭,想實現如 List<T> item.toDataTable() 這樣的轉換操作,嘗試了下現將主要代碼記錄如下。
主要轉換類 Test.cs:
namespace Test
{
public static class UnitFunc
{
public static DataTable toDataTable(this object obj,string _tName = null)
{
Type t = obj.GetType();
dynamic ts = obj;
object tf = ts[0];
PropertyInfo[] pi = tf.GetType().GetProperties(BindingFlags.IgnoreCase | BindingFlags.Instance | BindingFlags.Public);
DataTable DT = new DataTable();
DT.TableName = _tName == null ? tf.GetType().ToString() : _tName;
foreach (PropertyInfo p in pi)
{
DT.Columns.Add(p.Name, p.PropertyType);
}
DataRow dr = null;
foreach (var v in ts)
{
dr = DT.NewRow();
foreach (PropertyInfo p in pi)
{
dr[p.Name] = p.GetValue(v, null);
}
DT.Rows.Add(dr);
}
return DT;
}
}
}
調用:
private static void ReadDataTableFromList()
{
//以下這段讀取數據到List的代碼是我自己寫的一個小ORM框架,所以看過去可能跟一般的讀資料庫代碼不一樣,你們不用管這個,按自己的方法連接和讀取資料庫到List就行
//VMIS_model是數據表對象
ConnConfig conn = new ConnConfig(dbtype: DBType.SQLServer, connstring: SQLConnStr);
DBHelper<VMIS_model> vioDB = new DBHelper<VMIS_model>(conn);
List<VMIS_vio_model> list = vioDB.Select(whereSQL: "PlateNumber=@PN", sqlParams: new ORMParameter[]
{
new ORMParameter("@PN","車牌ABCDE")
});
//.toDataTable("xxx"),xxx為自定義表名參數,該參數為空則使用類名作為表名
DataTable DT = list.toDataTable("VMIS");
Console.WriteLine("數據載入到DataTable完成,共載入數據:" + DT.Rows.Count.ToString());
Console.WriteLine(JsonConvert.SerializeObject(DT, Formatting.Indented));
Console.WriteLine("DataTable表名:" + DT.TableName.ToString());
}
測試截圖: