Assume I have a DataTable
with three columns C1
, C2
, C3
:
var dt = new DataTable();
dt.Columns.Add("C1", typeof (int));
dt.Columns.Add("C2", typeof (string));
dt.Columns.Add("C3", typeof(string));
dt.Rows.Add(1, "1", "1");
dt.Rows.Add(1, "1", "2");
dt.Rows.Add(1, "2", "2");
I use Dynamic Linq on nuget to GroupBy
columns C1
and C2
like the code below and it works perfectly:
var output = dt.AsEnumerable()
.AsQueryable()
.GroupBy("new(it[\"C1\"] as C1, it[\"C2\"] as C2)", "it");
If you notice, there is a hardcode string it
to present as DataRow
, I get this idea from:
. If I try changing it
to string row
for example:
GroupBy("new(row[\"C1\"] as C1, row[\"C2\"] as C2)", "row");
I will get runtime error:
No property or field 'row' exists in type 'DataRow'
So, I don't clear up my mind much why having to hardcode it
as DataRow
? Is there any reason for this.