using System; using System.Collections.Generic; using System.Data.Entity; using System.Linq; using System.Reflection; using System.Text; using System.Threading.Tasks; using PoweredSoft.DynamicLinq.Extensions; using PoweredSoft.DynamicLinq.Fluent; namespace PoweredSoft.DynamicLinq.EntityFramework.Extensions { public static class DbContextExtensions { private static readonly MethodInfo QueryMethod = typeof(DbContextExtensions) .GetMethods(BindingFlags.Static | BindingFlags.Public) .First(t => t.Name == "Query" && t.IsGenericMethod); public static IQueryable Query(this DbContext context, Type pocoType, Action callback) { var method = QueryMethod.MakeGenericMethod(pocoType); var invokeResult = method.Invoke(null, new object[] {context, callback}); var ret = invokeResult as IQueryable; return ret; } public static IQueryable Query(this DbContext context, Action callback) where T : class { var query = context.Set().AsQueryable(); query = query.Query(callback); return query; } } }