c# - Dynamic query expression builder -
hi wondering how can achieve query expression below in dynamic way :
datatable _datasourcematrix = getmanager.budget.getall().converttodatatable(); switch (entitytype) { case domaintype.department: datatable _departmentlist = getmanager.departmentmanager.getall().converttodatatable(); var _genericbudgetjoindepartmentlist = in _datasourcematrix.asenumerable() join b in _departmentlist.asenumerable() on a.field<int>("entityid") equals b.field<int>("departmentid") select new { entityname = b.field<string>("name"), period = a.field<string>("period"), value = a.field<double>("value"), entityid = a.field<int>("entityid") }; _datasourcematrix = _genericbudgetjoindepartmentlist.orderby(x => x.period).converttodatatable(); break; } as can see have dynamic type of entitytype indicate sort of target datasource needs join _datasourcematrix. dont want code getting bloated keep rewriting same query expression change of target source join. had came across stuff querybuilder, not seems able achieve wanted be. idea ?
since have select table , field based on entitytype, there number of ways set them, including using switch case or creating dictionary indexed entitytype. once have them selected, can process join:
datatable _datasourcematrix = getmanager.budget.getall().converttodatatable(); datatable _jointable = null; string _joinfield = string.empty; switch (entitytype) { case domaintype.department: jointable = getmanager.departmentmanager.getall().converttodatatable(); _joinfield = "departmentid"; break; } var _genericbudgetjoindepartmentlist = in _datasourcematrix.asenumerable() join b in _jointable.asenumerable() on a.field<int>("entityid") equals b.field<int>(_joinfield) select new { entityname = b.field<string>("name"), period = a.field<string>("period"), value = a.field<double>("value"), entityid = a.field<int>("entityid") }; _datasourcematrix = _genericbudgetjoindepartmentlist.orderby(x => x.period).converttodatatable(); wiki
Comments
Post a Comment