List of classes to datatable
Cases like this I would hide the "sloppy" 

I would create a class that holds the mappings from the class to the table and create methods to build the mappings.  This way there is no need for reflection and we can save the funcs to be reused. 

public class Mapper&lt;TSource&gt;
{
    private readonly DataTable _source = new DataTable();
    private readonly List&lt;Func&lt;TSource, object&gt;&gt; _mappings = new List&lt;Func&lt;TSource, object&gt;&gt;();

    public Mapper&lt;TSource&gt; Configure&lt;TProperty, TData&gt;(Func&lt;TSource, TProperty&gt; property, string colName,
        Func&lt;TProperty, TData&gt; mapper)
    {
        _source.Columns.Add(colName, typeof (TData));
        Func&lt;TSource, object&gt; map = s =&gt; mapper(property(s));
        _mappings.Add(map);
        return this;
    }

    public Mapper&lt;TSource&gt; Configure&lt;TProperty&gt;(Func&lt;TSource, TProperty&gt; property, string colName)
    {
        _source.Columns.Add(colName, typeof(TProperty));
        Func&lt;TSource, object&gt; map = s =&gt; property(s);
        _mappings.Add(map);
        return this;
    }

    public Mapper&lt;TSource&gt; Configure&lt;TData&gt;(string colName, Func&lt;TData&gt; mapper)
    {
        _source.Columns.Add(colName, typeof(TData));
        Func&lt;TSource, object&gt; map = _ =&gt; mapper();
        _mappings.Add(map);
        return this;
    }

}


With this class we now have a datatable in _source that holds the columns that we want and a list of mappings from our source to the datatable.   Now we just need to create a ToDataTable method to use these in the same class.

public DataTable ToDataTable(IEnumerable&lt;TSource&gt; items)
{
    // make a new datatable with the same columns as the source
    var dt = _source.Clone();

    foreach (var item in items)
    {
        dt.Rows.Add(_mappings.Select(f =&gt; f(item)).ToArray());
    }

    return dt;
}


We would use it like so.  Typically you would only do the configurations once and then just reuse it with different lists. 

var inputClassMapper = new Mapper&lt;InputClass&gt;();
inputClassMapper.Configure(f =&gt; f.SomeField, "ColA", s =&gt; $"{s}ABCD")
                .Configure("ColB", () =&gt; DateTime.Now);

// have mapper convert input to datatables
var dt = inputClassMapper.ToDataTable(list);