9

Hello I am trying to convert DbContext result to DataTable. I have one class i.e. ClientTemplateModel which inherits DbContext. In this class I have one DbSet object i.e. public virtual DbSet<imagecomment> ImageComments { get; set; }. I am using Code first entity framework.

Here is my query.

using (ClientTemplateModel context = new ClientTemplateModel(connectionString))
{
  var result = context.ImageComments.Where(p => p.Dcn == dcn).OrderByDescending(p => p.CommentsDateTime);
}

Here I am want convert the result into DataTable. How can I convert this?

1 Answer 1

17

you can use Extension method that converts your Generic List To Datatable , you can use IQueryable/Ienumerable also instead of IList , follow the code

  public static DataTable ToDataTable<T>(this IList<T> data)
    {
        PropertyDescriptorCollection properties = 
            TypeDescriptor.GetProperties(typeof(T));
        DataTable table = new DataTable();
        foreach (PropertyDescriptor prop in properties)
            table.Columns.Add(prop.Name, Nullable.GetUnderlyingType(prop.PropertyType) ?? prop.PropertyType);
        foreach (T item in data)
        {
            DataRow row = table.NewRow();
            foreach (PropertyDescriptor prop in properties)
                 row[prop.Name] = prop.GetValue(item) ?? DBNull.Value;
            table.Rows.Add(row);
        }
        return table;
    }

if you have not used extension method before please see msdn

source : https://stackoverflow.com/a/5805044/1018054

Hope this helps !!!

Sign up to request clarification or add additional context in comments.

5 Comments

Thank you for reply. How can call this?
I used the extension method but in my case how can call this method ?
you can create a static class and this method inside and then result.ToDatatable() , i hv given msdn ref. please look into that for more on this..
make sure your result is of type you specified in arguments of method.
I have change my method to static and tried this var result = context.ImageComments.Where(p => p.Dcn == dcn).OrderByDescending(p => p.CommentsDateTime); DataTable dt = result.ToDataTable; But I could not find .ToDataTable

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.