I create a dynamic list at run-time and after execution I need to assign the list to my class properties
List<tblchargemaster> charge = new List<tblchargemaster>();
charge = (List<tblchargemaster>) ObjDB.SelectQuery("tblchargemaster");
tblchargemaster
is the class type and SelectQuery
function returns List<dynamic>
. How can I convert this dynamic list to a list with my class type?
public List<dynamic> SelectQuert(string TableName)
{
Conn.Open();
DataTable dt = new DataTable("map");
string Query = "Select * from " + TableName;
MySqlDataAdapter dr = new MySqlDataAdapter(Query, Conn);
dr.Fill(dt);
List<dynamic> dynamicDt = dt.ToDynamic();
Conn.Close();
return dynamicDt;
}
And Generic Class is
public static class DataTableExtensions
{
public static List<dynamic> ToDynamic(this DataTable dt)
{
var dynamicDt = new List<dynamic>();
foreach (DataRow row in dt.Rows)
{
dynamic dyn = new ExpandoObject();
foreach (DataColumn column in dt.Columns)
{
var dic = (IDictionary<string, object>)dyn;
dic[column.ColumnName] = row[column];
dynamicDt.Add(dyn);
}
}
return dynamicDt;
}
}
Edited, since explicit cast from dynamic to a strong type is not supported.
var charge = ObjDB.SelectQuert("tblchargemaster").Cast<tblchargemaster>();
becomes:
var charge = ObjDB.SelectQuert("tblchargemaster").Select(CastDynamicTo<tblchargemaster>)
whereas CastDynamicTo<tblchargemaster>
is implemented by help of Is there a way to convert a dynamic or anonymous object to a strongly typed, declared object?
Use Cast<tblchargemaster>()
method:
List<tblchargemaster> charge = new List<tblchargemaster>();
charge = charge.AddRange(
ObjDB.SelectQuert("tblchargemaster").Cast<tblchargemaster>());
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With