Chinh Do

Convert List<T>/IEnumerable to DataTable/DataView

2nd April 2009

Convert List<T>/IEnumerable to DataTable/DataView

Here’s a method to convert a generic List<T> to a DataTable. This can be used with ObjectDataSource so you get automatic sorting, etc.

/// <summary>
/// Convert a List{T} to a DataTable.
/// </summary>
private DataTable ToDataTable<T>(List<T> items)
    var tb = new DataTable(typeof (T).Name);

    PropertyInfo[] props = typeof (T).GetProperties(BindingFlags.Public | BindingFlags.Instance);

    foreach (PropertyInfo prop in props)
        Type t = GetCoreType(prop.PropertyType);
        tb.Columns.Add(prop.Name, t);

    foreach (T item in items)
        var values = new object[props.Length];

        for (int i = 0; i < props.Length; i++)
            values[i] = props[i].GetValue(item, null);


    return tb;

/// <summary>
/// Determine of specified type is nullable
/// </summary>
public static bool IsNullable(Type t)
    return !t.IsValueType || (t.IsGenericType && t.GetGenericTypeDefinition() == typeof(Nullable<>));

/// <summary>
/// Return underlying type if type is Nullable otherwise return the type
/// </summary>
public static Type GetCoreType(Type t)
    if (t != null && IsNullable(t))
        if (!t.IsValueType)
            return t;
            return Nullable.GetUnderlyingType(t);
        return t;
  • 1/22/2010 – Fix to support Nullable types.

This entry was posted on Thursday, April 2nd, 2009 at 7:00 pm and is filed under Dotnet/.NET - C#, Programming. You can follow any responses to this entry through the RSS 2.0 feed. You can leave a response, or trackback from your own site.

There are currently 33 responses to “Convert List<T>/IEnumerable to DataTable/DataView”

  1. 1 On April 5th, 2009, Weekly Link Post 88 « Rhonda Tipton’s WebLog said:

    […] Chinh Do demonstrates how to Convert List<T>/IEnumerable to DataTable/DataView. […]

  2. 2 On July 3rd, 2009, Joe said:

    Very cool tip.. just used that to bind my grid to custom business object.
    was searching everywhere for a way to do this that supports sorting

  3. 3 On August 7th, 2009, Johannes Rudolph said:

    I’ve written a small library myself to accomplish this task. It uses reflection only for the first time an object type is to be translated to a datatable. It emits a method that will do all the work translating an object type.

    Its blazing fast. You can find it here:

  4. 4 On November 10th, 2009, Mal said:

    I know Jeff Atwood may agree, but dude, using ‘var’ for all your declarations is annoying.

    Use it where appropriate, not as a vb/keyboard laziness.

    Otherwise, very nice.

  5. 5 On December 2nd, 2009, Coder said:

    must include using statement: using System.Reflection;

    Also, I am getting an error when trying to implement:

    DataTable myTable = new DataTable(“CurrentTable”);
    myTable = ToDataTable(svc);

    It is: The type arguments for the method cannot be inferred. Not really sure what that means. Can you post an actual implementation using the method?

  6. 6 On December 2nd, 2009, Chinh Do said:

    Hi Coder

    You need to specify the type of the list items in the call. Example:

    var persons = new List<Person>();
    DataTable myTable = ToDataTable<Person>(persons);


    I agree w/ you… var shouldn’t be used indiscriminately. I just learned about it when I wrote this article though… so I had to use it everywhere :-)


  7. 7 On December 11th, 2009, Pepcoder said:

    I have a method as follows.
    List GetServicesForLayoutFields()

    can somebody suggest how can call the method ToDataTable(List items) to convert my above list to a datatable..
    Please suggest

  8. 8 On December 16th, 2009, vsrkrishnaraju said:

    it is very nice useful code for the developers

    thanks and regards

  9. 9 On January 22nd, 2010, Marko said:

    I need this code badly but when I use it in my code I get the following error:

    DataSet does not support System.Nullable

    and it is generated on the following line:

    table.Columns.Add(property.Name, property.PropertyType);

    My code is identical to yours and I use your method in my BLL method such as:

    [DataObjectMethod(DataObjectMethodType.Select, true)]
    public DataTable GetList(string sortExpression, int maximumRows, int startRowIndex)
    var records = _dc.Products.OrderBy(p => p.ProductName).ToList();
    return ToDataTable(records);

    If you have any suggestions please help… :)

  10. 10 On January 22nd, 2010, Chinh Do said:

    Hi Marko:

    I’ve fixed the code in the article to support nullable types. As the error message suggests, DataSets do not support nullable types. So the fix I put in is to use the non-nullable counterpart when I encounter nullable types.


  11. 11 On June 24th, 2010, Venkata Koppaka said:

    Very Useful dealing with custom business objects

  12. 12 On June 24th, 2010, Chinh Do said:

    Hi Venkata: Appreciate your note. Glad this was helpful.

  13. 13 On February 8th, 2011, Allen said:

    Pretty nice! If you want to compare notes to Microsoft’s version of the same thing for use as an extension method, take a look to the following MSDN link:

  14. 14 On February 8th, 2011, Chinh Do said:

    Thanks for the link Allen. Will check it out. Chinh

  15. 15 On March 4th, 2011, Mark J said:

    Very nice code – came in handy at just the right time!

  16. 16 On March 15th, 2011, Daniel said:

    Dude!!! you are lifesaver.
    I’ve been trying to get this #@#$ thing to work for more than 5 hours.
    Thanks a lot!

  17. 17 On April 7th, 2011, Chinh Do said:

    Glad to hear that.

  18. 18 On September 27th, 2011, Saif said:

    This is not working when I join two table with all columns selected.

    var productsQuery = (from p in db.Products
    join c in db.Categories
    on p.Category_Id equals c.Category_Id
    where p.Vendor_Code == VendorCode
    select new { p,c });

    DataTable dt = LinqToDataTable.ToDataTable(productsQuery.ToList());

    Please suggest what to do?

  19. 19 On May 13th, 2012, Saeed Neamati said:

    That’s why I love reflection. Understanding what goes on inside an unknown object (late-binding) is one of the most powerful programming concepts. Thanks for this nice code snippet.

  20. 20 On May 13th, 2012, Chinh Do said:

    Thanks, Saeed. Glad you found this.

  21. 21 On August 2nd, 2012, Zach said:

    Thanks for the code…I would have lost hours and hours trying to figure this out myself.

    You’re awesome!

  22. 22 On August 2nd, 2012, Chinh Do said:

    Zach: Thanks for leaving me a note. That’s great.

  23. 23 On January 26th, 2013, said:

    “Convert List/IEnumerable to DataTable/DataView Chinh Do” was in fact a wonderful post and also I really was in fact really happy to discover the blog post.

    I appreciate it,Hye

  24. 24 On January 17th, 2016, Convert IEnumerable to DataTable | ASK AND ANSWER said:

    […] Look at this one: Convert List/IEnumerable to DataTable/DataView […]

  25. 25 On May 12th, 2016, หนังเอ็กซ์ said:

    Yߋս ϲould definitely see your ᥱxpertise in the article you write.
    The arena hopes for even mߋre рassionate writerѕ such as you who
    are not afraid to mention how they believe. Alⅼ the time folloԝ
    your heart.

  26. 26 On May 16th, 2016, chicken recipes said:

    Any oil needs proper disposal because it’s flammable and can cause misery to small
    animals that come in contact with it. Jambalaya is a southern dish arising out of Louisiana.
    If mostly you are cooking dinner for your family –
    a 6 quart is probably your best bet.

  27. 27 On September 4th, 2016, หนังxใหม่ said:

    Ꮇy brother suggested I might like this website.
    He was entirely riցht. This post actualⅼy made my day.
    You cаn not imagine just how muϲh time I had spent for this
    information! Thanks!

  28. 28 On October 4th, 2016, ดูxxx said:

    Do yօu have any video of that? I’d like to find out some additional information.

  29. 29 On January 16th, 2017, คลิบxxx said:

    Remɑrkable! Its actually awesome рieсе of writіng, I have got much clear idеa concerning from this piece of writing.

  30. 30 On January 17th, 2017, คลิป18 said:

    Aw, this ԝas an incredibly good post. Spending some time and actual effort to generate a good article…
    but what can I say… I hesitate a lot and neνer seem to
    get anytɦing done.

  31. 31 On January 18th, 2017, นังโป said:

    Hi there tο eveгy singⅼe one, it’s genuinely a nice fօr me to pay a
    quick visit this web site, it contains useful Information.

  32. 32 On January 26th, 2017, คลิป said:

    Dօes your site haѵᥱ a contact page? I’m having
    trouble locating it but, I’d like to shoot ʏou an e-mail.

    I’ve got some rеcommendatiߋns for your blog you might
    be interested in hearing. Either way, greаt site and I look forward
    to seeing it dᥱvelop over time.

  33. 33 On February 27th, 2017, rx farmacia cialis said:

    Erettile giovanile rx farmacia italia alla consegna mg prezzo prezzo 20 vardenafil generico et?пїЅ disfunzione in cialis

Leave a Comment

  • Calendar

  • April 2009
    M T W T F S S
    « Mar   Jun »