This solution is simple, very fast and easy to use.
Create the DbContext extension:
using System.Data; using System.Data.Common; using System.Data.Entity; .. .. public static class DbContextExtensions { public static DataTable DataTable(this DbContext context, string sqlQuery) { DbProviderFactory dbFactory = DbProviderFactories.GetFactory(context.Database.Connection); using (var cmd = dbFactory.CreateCommand()) { cmd.Connection = context.Database.Connection; cmd.CommandType = CommandType.Text; cmd.CommandText = sqlQuery; using (DbDataAdapter adapter = dbFactory.CreateDataAdapter()) { adapter.SelectCommand = cmd; DataTable dt = new DataTable(); adapter.Fill(dt); return dt; } } } }
Examples:
using (MyDbContext db = new MyDbContext()) { string query = db.Students.Where(o => o.Age > 20).ToString(); DataTable dataTable = db.DataTable(query); .. DataTable dt = db.DataTable( ( from o in db.Studets where o.Age > 20 select o ).ToString() ); }
source share