public static void Main()
ParameterExpression r = Expression.Parameter(typeof(IDataRecord), "r");
List<MemberBinding> bindings = new List<MemberBinding>();
foreach (PropertyInfo property in GetWritableProperties<T>())
MethodCallExpression propertyValue = Expression.Call(
typeof(Utility).GetMethod("Field").MakeGenericMethod(property.PropertyType),
r, Expression.Constant(property.Name));
MemberBinding binding = Expression.Bind(property, propertyValue);
Expression initializer = Expression.MemberInit(Expression.New(typeof(T)), bindings);
Expression<Func<IDataRecord, T>> lambda = Expression.Lambda<Func<IDataRecord, T>>(