Is it possible to do the following in C# (or in any other language)?I am fetching data from a database. At run time I can compute the number of columns and data types of the columns fetched.Next I want to generate a class with these data types as fields. I also want to store all the records that I fetched in a collection. The problem is that I want to do both step 1 and 2 at runtimeIs this possible? I am using C# currently but I can shift to something else if i need to. 
Generating a class dynamically from types that are fetched at runtime
c#;dynamic typing
Use CodeDom. Here's something to get startedusing System;using System.Collections.Generic;using System.Linq;using Microsoft.CSharp;using System.CodeDom.Compiler;using System.CodeDom;namespace Test{    class Program    {        static void Main(string[] args)        {            string className = BlogPost;            var props = new Dictionary<string, Type>() {                { Title, typeof(string) },                { Text, typeof(string) },                { Tags, typeof(string[]) }            };            createType(className, props);        }        static void createType(string name, IDictionary<string, Type> props)        {            var csc = new CSharpCodeProvider(new Dictionary<string, string>() { { CompilerVersion, v4.0 } });            var parameters = new CompilerParameters(new[] { mscorlib.dll, System.Core.dll}, Test.Dynamic.dll, false);            parameters.GenerateExecutable = false;            var compileUnit = new CodeCompileUnit();            var ns = new CodeNamespace(Test.Dynamic);            compileUnit.Namespaces.Add(ns);            ns.Imports.Add(new CodeNamespaceImport(System));            var classType = new CodeTypeDeclaration(name);            classType.Attributes = MemberAttributes.Public;            ns.Types.Add(classType);            foreach (var prop in props)            {                var fieldName = _ + prop.Key;                var field = new CodeMemberField(prop.Value, fieldName);                classType.Members.Add(field);                var property = new CodeMemberProperty();                property.Attributes = MemberAttributes.Public | MemberAttributes.Final;                property.Type = new CodeTypeReference(prop.Value);                property.Name = prop.Key;                property.GetStatements.Add(new CodeMethodReturnStatement(new CodeFieldReferenceExpression(new CodeThisReferenceExpression(), fieldName)));                property.SetStatements.Add(new CodeAssignStatement(new CodeFieldReferenceExpression(new CodeThisReferenceExpression(), fieldName), new CodePropertySetValueReferenceExpression()));                classType.Members.Add(property);            }            var results = csc.CompileAssemblyFromDom(parameters,compileUnit);            results.Errors.Cast<CompilerError>().ToList().ForEach(error => Console.WriteLine(error.ErrorText));        }    }}It creates an assembly 'Test.Dynamic.dll' with this class in itnamespace Test.Dynamic{    public class BlogPost    {        private string _Title;        private string _Text;        private string[] _Tags;        public string Title        {            get            {                return this._Title;            }            set            {                this._Title = value;            }        }        public string Text        {            get            {                return this._Text;            }            set            {                this._Text = value;            }        }        public string[] Tags        {            get            {                return this._Tags;            }            set            {                this._Tags = value;            }        }    }}You could also use dynamic features of C#DynamicEntity class, no need to create anything at runtimepublic class DynamicEntity : DynamicObject{    private IDictionary<string, object> _values;    public DynamicEntity(IDictionary<string, object> values)    {        _values = values;    }    public override bool TryGetMember(GetMemberBinder binder, out object result)    {        if (_values.ContainsKey(binder.Name))        {            result = _values[binder.Name];            return true;        }        result = null;        return false;    }}And use it like thisvar values = new Dictionary<string, object>();values.Add(Title, Hello World!);values.Add(Text, My first post);values.Add(Tags, new[] { hello, world });var post = new DynamicEntity(values);dynamic dynPost = post;var text = dynPost.Text;