using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Data; using System.Dynamic; namespace DynamicClassDemo { public static class Extensions { public static dynamic AsDynamic(this DataSet dataSet) { return new DataSetDynamicCaller(dataSet); } } public class DataSetDynamicCaller : DynamicObject { DataSet dataset; public DataSetDynamicCaller(DataSet dataset) { this.dataset = dataset; } public override object GetMember(System.Scripting.Actions.GetMemberAction info) { return new DataTableDynamicCaller(dataset.Tables[info.Name]); } } public class DataTableDynamicCaller : DynamicObject { DataTable dataTable; public DataTableDynamicCaller(DataTable dataTable) { this.dataTable = dataTable; } public override object InvokeMember(System.Scripting.Actions.CallAction info, object[] arguments) { if (info.Name == "GetRow") { return new DataRowDynamicCaller(dataTable.Rows[(int)arguments[0]]); } return base.InvokeMember(info, arguments); } } public class DataRowDynamicCaller : DynamicObject { DataRow dataRow; public DataRowDynamicCaller(DataRow dataRow) { this.dataRow = dataRow; } public override object GetMember(System.Scripting.Actions.GetMemberAction info) { return dataRow[info.Name]; } } }