public void Reflection() { var db = new TrackerDataContext { Log = Console.Out }; IQueryable source = db.Task.Where(t => t.LastModifiedBy == "*****@*****.**").OrderBy(t => t.CreatedId); // can be static Type queryableType = typeof(Queryable); // can be static MethodInfo countMethod = (from m in queryableType.GetMethods(BindingFlags.Static | BindingFlags.Public) where m.Name == "Count" && m.IsGenericMethod && m.GetParameters().Length == 1 select m).FirstOrDefault(); Assert.IsNotNull(countMethod); var genericMethod = countMethod.MakeGenericMethod(new[] { source.ElementType }); var expression = Expression.Call(null, genericMethod, source.Expression); Assert.IsNotNull(expression); Type dataContextType = db.GetType(); PropertyInfo providerProperty = dataContextType.GetProperty("Provider", BindingFlags.Instance | BindingFlags.NonPublic); object provider = providerProperty.GetValue(db, null); Type providerType = provider.GetType().GetInterface("IProvider"); MethodInfo getCommandMethod = providerType.GetMethod("GetCommand", BindingFlags.Instance | BindingFlags.Public); object commandObject = getCommandMethod.Invoke(provider, new object[] { expression }); Assert.IsNotNull(commandObject); }