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