将Code First Entity Framework中的DbContext转换为Datatable

9
我正在尝试将DbContext的结果转换为DataTable。我有一个,即ClientTemplateModel,它继承DbContext。在这个类中,我有一个DbSet对象,即public virtual DbSet<imagecomment> ImageComments { get; set; }。我正在使用Code first entity framework

以下是我的查询。

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

我想把result转换成DataTable。该怎么转换?

1个回答

16

您可以使用扩展方法将通用列表转换为数据表,您也可以使用IQueryable/IEnumerable而不是IList,按照以下代码进行操作

  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;
    }

如果您以前没有使用扩展方法,请参阅msdn

来源:https://dev59.com/I3RB5IYBdhLWcg3wpYmo#5805044

希望这可以帮到您!!!


谢谢您的回复。如何调用它? - Ajay
我使用了扩展方法,但在我的情况下,如何调用这个方法? - Ajay
你可以创建一个静态类,并在其中编写该方法,然后调用result.ToDatatable()。我已经提供了MSDN参考,请查看更多信息。 - Vishal Sharma
确保你的方法返回值类型与参数中指定的类型相同。 - Vishal Sharma
我已将我的方法更改为静态,并尝试了以下代码:var result = context.ImageComments.Where(p => p.Dcn == dcn).OrderByDescending(p => p.CommentsDateTime); DataTable dt = result.ToDataTable; 但我找不到 .ToDataTable - Ajay

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接