Exemple #1
0
        public async Task capture_events_to_a_new_stream_and_fetch_the_events_back_async_with_linq(DocumentTracking sessionType)
        {
            var store = InitStore();

            using (var session = store.OpenSession(sessionType))
            {
                // SAMPLE: start-stream-with-aggregate-type
                var joined = new MembersJoined {
                    Members = new[] { "Rand", "Matt", "Perrin", "Thom" }
                };
                var departed = new MembersDeparted {
                    Members = new[] { "Thom" }
                };

                var id = session.Events.StartStream(joined, departed).Id;
                await session.SaveChangesAsync();

                // ENDSAMPLE

                var streamEvents = await Queryable.Where <IEvent>(session.Events.QueryAllRawEvents(), x => x.StreamId == id).OrderBy(x => x.Version).ToListAsync();

                streamEvents.Count().ShouldBe(2);
                streamEvents.ElementAt(0).Data.ShouldBeOfType <MembersJoined>();
                streamEvents.ElementAt(0).Version.ShouldBe(1);
                streamEvents.ElementAt(1).Data.ShouldBeOfType <MembersDeparted>();
                streamEvents.ElementAt(1).Version.ShouldBe(2);

                streamEvents.Each(e => e.Timestamp.ShouldNotBe(default(DateTimeOffset)));
            }
        }
        public void Constructor_WithOneParameter_IfTheProviderParameterIsNotNull_ShouldSetTheExpression()
        {
            var queryable = new Queryable<string>(Mock.Of<IQueryProvider>());

            Assert.AreEqual(queryable, ((ConstantExpression) queryable.Expression).Value);
            Assert.IsTrue(typeof(IQueryable<string>).IsAssignableFrom(queryable.Expression.Type));
        }
        private static object GenerateQueryable(Type queryableType, int size, Dictionary <Type, object> createdObjectReferences)
        {
            bool   isGeneric = queryableType.IsGenericType;
            object list;

            if (isGeneric)
            {
                Type listType = typeof(List <>).MakeGenericType(queryableType.GetGenericArguments());
                list = GenerateCollection(listType, size, createdObjectReferences);
            }
            else
            {
                list = GenerateArray(typeof(object[]), size, createdObjectReferences);
            }
            if (list == null)
            {
                return(null);
            }
            if (isGeneric)
            {
                Type       argumentType      = typeof(IEnumerable <>).MakeGenericType(queryableType.GetGenericArguments());
                MethodInfo asQueryableMethod = typeof(Queryable).GetMethod("AsQueryable", new[] { argumentType });
                return(asQueryableMethod.Invoke(null, new[] { list }));
            }

            return(Queryable.AsQueryable((IEnumerable)list));
        }
Exemple #4
0
        //Func<Type, IEnumerable<object>> fnGetObjects;

        #region CreateQuery
        /// <summary>
        /// called during deserialization.
        /// </summary>
        /// <param name="elementType"></param>
        /// <returns></returns>
        public dynamic CreateQuery(Type elementType)
        {
            dynamic ienumerable    = this.fnGetObjects(elementType);
            Type    enumerableType = ienumerable.GetType();

            if (!typeof(IEnumerable <>).MakeGenericType(elementType).IsAssignableFrom(enumerableType))
            {
                ienumerable = Enumerable.ToArray(LinqHelper.CastToGenericEnumerable(ienumerable, elementType));
                //throw new InvalidOperationException(string.Format("Return value Type is {1}. Expected: {0}", typeof(IEnumerable<>).MakeGenericType(elementType), ienumerable.GetType()));
            }


            IQueryable      queryable = Queryable.AsQueryable(ienumerable);
            IQueryProvider  provider  = (IQueryProvider)queryable.Provider;
            Type            queryType = typeof(Query <>).MakeGenericType(elementType);
            ConstructorInfo ctor      = queryType.GetConstructors()[2];//Query(IQueryProvider provider, Expression expression)

            ParameterExpression[] parameters = new ParameterExpression[]
            {
                Expression.Parameter(typeof(IQueryProvider)),
                Expression.Parameter(typeof(Expression))
            };

            NewExpression    newexpr = Expression.New(ctor, parameters);
            LambdaExpression lambda  = Expression.Lambda(newexpr, parameters);
            var     newFn            = lambda.Compile();
            dynamic query            = newFn.DynamicInvoke(new object[] { provider, Expression.Constant(queryable) });

            return(query);
        }
Exemple #5
0
				public Expression GetGroupJoin(GroupJoinContext context)
				{
					// Convert outer condition.
					//
					var outerParam = Expression.Parameter(context._outerKeyLambda.Body.Type, "o");
					var outerKey   = context._outerKeyLambda.GetBody(context.Lambda.Parameters[0]);

					outerKey = context.Builder.BuildExpression(context, outerKey, false);

					// Convert inner condition.
					//
					var parameters = context.Builder.CurrentSqlParameters
						.Select((p,i) => new { p, i })
						.ToDictionary(_ => _.p.Expression, _ => _.i);
					var paramArray = Expression.Parameter(typeof(object[]), "ps");

					var innerKey = context._innerKeyLambda.Body.Transform(e =>
					{
						int idx;

						if (parameters.TryGetValue(e, out idx))
						{
							return Expression.Convert(
								Expression.ArrayIndex(paramArray, Expression.Constant(idx)),
								e.Type);
						}

						return e;
					});

					// Item reader.
					//
					var expr = Expression.Call(
						null,
						MemberHelper.MethodOf(() => Queryable.Where(null, (Expression<Func<TElement,bool>>)null)),
						context._innerExpression,
						Expression.Lambda<Func<TElement,bool>>(
							ExpressionBuilder.Equal(context.Builder.MappingSchema, innerKey, outerParam),
							new[] { context._innerKeyLambda.Parameters[0] }));

					var lambda = Expression.Lambda<Func<IDataContext,TKey,object[],IQueryable<TElement>>>(
						Expression.Convert(expr, typeof(IQueryable<TElement>)),
						Expression.Parameter(typeof(IDataContext), "ctx"),
						outerParam,
						paramArray);

					var itemReader = CompiledQuery.Compile(lambda);

					return Expression.Call(
						null,
						MemberHelper.MethodOf(() => GetGrouping(null, null, default(TKey), null)),
						new[]
						{
							ExpressionBuilder.QueryRunnerParam,
							Expression.Constant(context.Builder.CurrentSqlParameters),
							outerKey,
							Expression.Constant(itemReader),
						});
				}
 public virtual async Task <List <OpenIddictScope> > ListAsync(int?count, int?offset, CancellationToken cancellationToken = default)
 {
     return(await Queryable.OrderBy((await GetMongoQueryableAsync(GetCancellationToken(cancellationToken))), x => x.Id)
            .SkipIf <OpenIddictScope, IQueryable <OpenIddictScope> >(offset.HasValue, offset)
            .TakeIf <OpenIddictScope, IQueryable <OpenIddictScope> >(count.HasValue, count)
            .As <IMongoQueryable <OpenIddictScope> >()
            .ToListAsync(GetCancellationToken(cancellationToken)));
 }
Exemple #7
0
        public static void GetAverage(int[] numbers)
        {
            // Write a function that takes an integer array and prints the AVERAGE of the values in the array.
            // For example, with an array [2, 10, 3], your program should write 5 to the console.
            double avg = Queryable.Average(numbers.AsQueryable());

            Console.WriteLine(avg);
        }
Exemple #8
0
 public List<INSTITUTION> GetAllActiveDeleted(bool sign)
 {
   IQueryable<INSTITUTION> queryable = Queryable.Where<INSTITUTION>((IQueryable<INSTITUTION>) new DataClasses1DataContext().INSTITUTIONs, (Expression<Func<INSTITUTION, bool>>) (p => p.Active == sign));
   List<INSTITUTION> list = new List<INSTITUTION>();
   foreach (INSTITUTION institution in (IEnumerable<INSTITUTION>) queryable)
     list.Add(institution);
   return list;
 }
        /// <summary>
        /// Applies the LambdaExpression as an Expression<Func<TSource, bool>> predicate expression on source.Where()
        /// </summary>
        /// <param name="source"></param>
        /// <param name="predicate"></param>
        /// <typeparam name="TSource"></typeparam>
        /// <returns></returns>

        public static IEnumerable <TSource> Where <TSource>(this IEnumerable <TSource> source, EntityQueryType <TSource> filter)
        {
            if (filter.HasValue)
            {
                return(Queryable.Where(source.AsQueryable(), filter.Query));
            }
            return(source);
        }
Exemple #10
0
 public Task <List <string> > GetContributorsForEntity(long entityId)
 {
     return(Queryable.Include(edit => edit.User)
            .Where(edit => edit.EntityId == entityId && edit.ApprovedByUserId.HasValue)
            .Select(edit => edit.User.UserName)
            .Distinct()
            .ToListAsync());
 }
Exemple #11
0
 public Task <List <SuggestedEdit> > GetEditsForCharacterAndUser(long characterId, long userId)
 {
     return(Queryable
            .Include(edit => edit.User)
            .Where(edit => edit.EntityId == characterId && edit.ApprovedByUserId == null &&
                   edit.UserId == userId)
            .ToListAsync());
 }
Exemple #12
0
        /// <summary>
        /// 根据字段名排序
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="queryable"></param>
        /// <param name="propertyName"></param>
        /// <param name="desc"></param>
        /// <returns></returns>
        public static IQueryable <T> OrderBy <T>(this IQueryable <T> queryable, string propertyName, bool desc)
        {
            var     param       = System.Linq.Expressions.Expression.Parameter(typeof(T));
            var     body        = System.Linq.Expressions.Expression.Property(param, propertyName);
            dynamic keySelector = System.Linq.Expressions.Expression.Lambda(body, param);

            return(desc ? Queryable.OrderByDescending(queryable, keySelector) : Queryable.OrderBy(queryable, keySelector));
        }
        public void Constructor_WithOneParameter_IfTheProviderParameterIsNotNull_ShouldSetTheProvider()
        {
            var provider = Mock.Of<IQueryProvider>();

            var queryable = new Queryable<object>(provider);

            Assert.AreEqual(provider, queryable.Provider);
        }
Exemple #14
0
        /// <summary>
        /// 再排序
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="queryable"></param>
        /// <param name="propertyName"></param>
        /// <param name="desc"></param>
        /// <returns></returns>
        public static IOrderedQueryable <T> ThenBy <T>(this IOrderedQueryable <T> queryable, string propertyName, bool desc = false)
        {
            var     param       = Expression.Parameter(typeof(T));
            var     body        = Expression.Property(param, propertyName);
            dynamic keySelector = Expression.Lambda(body, param);

            return(desc ? Queryable.ThenByDescending(queryable, keySelector) : Queryable.ThenBy(queryable, keySelector));
        }
Exemple #15
0
 public override void SetUp()
 {
     base.SetUp();
     _source2 = Expression.Constant(new[] { "test1", "test2" });
     _node    = new UnionExpressionNode(
         CreateParseInfo(SourceNode, "u", ReflectionUtility.GetMethod(() => Queryable.Union <int> (null, null))),
         _source2);
 }
 public static TQueryable PageBy <T, TQueryable>(
     this TQueryable query,
     int skipCount,
     int maxResultCount)
     where TQueryable : IQueryable <T>
 {
     return((TQueryable)Queryable.Take <T>(Queryable.Skip <T>(query, skipCount), maxResultCount));
 }
Exemple #17
0
        public static object Find(string typeString, long id, out ISave repo)
        {
            var type = GetModelType(typeString);
            var set  = BaseCruds.GetDbSet(type, out repo);
            var q    = Queryable.Where <IInt64Key>((IQueryable <IInt64Key>)set, b => b.Id == id);

            return(q.FirstOrDefault());
        }
            internal static IOrderedQueryable <T> ThenBy(IOrderedQueryable <T> source, string propertyName, ListSortDirection sortDirection)
            {
                dynamic keySelector = GetLambdaExpression(propertyName);

                return(sortDirection == ListSortDirection.Ascending
                    ? Queryable.ThenBy(source, keySelector)
                    : Queryable.ThenByDescending(source, keySelector));
            }
Exemple #19
0
        // ---------------------
        // Query-builder Methods
        // ---------------------

        /// <summary>
        ///     This query-builder method creates a new query whose results are the
        ///     unique results of this query.
        /// </summary>
        /// <returns> a new ObjectQuery instance. </returns>
        public ObjectQuery <T> Distinct()
        {
            if (IsLinqQuery(this))
            {
                return((ObjectQuery <T>)Queryable.Distinct(this));
            }
            return(new ObjectQuery <T>(EntitySqlQueryBuilder.Distinct(QueryState)));
        }
Exemple #20
0
        /// <summary>
        /// 按指定的属性名称对<see cref="IQueryable{T}"/>序列进行排序
        /// </summary>
        /// <param name="source">IQueryable{T}序列</param>
        /// <param name="propertyName">属性名称</param>
        /// <param name="sortDirection">排序方向</param>
        /// <returns></returns>
        public static IOrderedQueryable <T> OrderBy(IQueryable <T> source, string propertyName, ListSortDirection sortDirection)
        {
            dynamic keySelector = GetKeySelector(propertyName);

            return(sortDirection == ListSortDirection.Ascending
                ? Queryable.OrderBy(source, keySelector)
                : Queryable.OrderByDescending(source, keySelector));
        }
Exemple #21
0
 public static IOrderedQueryable <TSource> ThenBy <TSource, TKey>(this IOrderedQueryable <TSource> source, Expression <Func <TSource, TKey> > keySelector, WebSortOrder order)
 {
     if (order == WebSortOrder.Asc)
     {
         return(Queryable.ThenBy(source, keySelector));
     }
     return(Queryable.ThenByDescending(source, keySelector));
 }
        public virtual IQueryable Distinct(IQueryable query, string elementSelector)
        {
            if (!string.IsNullOrWhiteSpace(elementSelector))
            {
                query = Select(query, elementSelector);
            }

            return(Queryable.Distinct((dynamic)query));
        }
        /// <summary>
        /// Apply the Where condition when applyPredicate is true
        /// </summary>
        /// <param name="source"></param>
        /// <param name="wherePredicate"></param>
        /// <param name="applyPredicate"></param>
        /// <typeparam name="TSource"></typeparam>
        /// <returns></returns>
        public static IQueryable <TSource> WhereWhen <TSource>(this IEnumerable <TSource> source, Expression <Func <TSource, bool> > wherePredicate, bool applyPredicate)
        {
            if (applyPredicate)
            {
                return(Queryable.Where(source.AsQueryable(), wherePredicate));
            }

            return(source.AsQueryable());
        }
Exemple #24
0
        public IMobileServiceTableQuery <T> ThenByDescending <TKey>(Expression <Func <T, TKey> > keySelector)
        {
            if (keySelector == null)
            {
                throw new ArgumentNullException("keySelector");
            }

            return(this.QueryProvider.Create(this.Table, Queryable.ThenByDescending((IOrderedQueryable <T>) this.Query, keySelector), this.Parameters, this.RequestTotalCount));
        }
Exemple #25
0
        public IMobileServiceTableQuery <T> Where(Expression <Func <T, bool> > predicate)
        {
            if (predicate == null)
            {
                throw new ArgumentNullException("predicate");
            }

            return(this.QueryProvider.Create <T>(this.Table, Queryable.Where(this.Query, predicate), this.Parameters, this.RequestTotalCount));
        }
Exemple #26
0
        public void Test_WithMethodInfoAndClosedGenericMethod_NotAllowed()
        {
            var closedGenericMethod = ReflectionUtility.GetMethod(() => Queryable.Select(null, (Expression <Func <int, int> >)null));

            Assert.That(
                () => _registry.Register(new[] { closedGenericMethod }, typeof(SelectExpressionNode)),
                Throws.InvalidOperationException.With.Message.EqualTo(
                    "Cannot register closed generic method 'Select', try to register its generic method definition instead."));
        }
        /// <summary>
        /// 按指定的属性名称对<see cref="IOrderedQueryable{T}"/>序列进行排序
        /// </summary>
        /// <param name="source">IOrderedQueryable{T}序列</param>
        /// <param name="propertyName">属性名称</param>
        /// <param name="sortDirection">排序方向</param>
        /// <returns></returns>
        public static IOrderedQueryable <T> ThenBy(IOrderedQueryable <T> source, string propertyName, ListSortDirection sortDirection)
        {
            propertyName.CheckNotNullOrEmpty("propertyName");
            dynamic keySelector = GetKeySelector(propertyName);

            return(sortDirection == ListSortDirection.Ascending
                ? Queryable.ThenBy(source, keySelector)
                : Queryable.ThenByDescending(source, keySelector));
        }
Exemple #28
0
        public EasyTableQuery <T> OrderByDescending <TKey>(Expression <Func <T, TKey> > keySelector)
        {
            if (keySelector == null)
            {
                throw new ArgumentNullException("keySelector");
            }

            return(this.QueryProvider.Create(Queryable.OrderByDescending(this.Query, keySelector), this.Parameters, this.RequestTotalCount));
        }
        public virtual object Sum(IQueryable query, string elementSelector)
        {
            if (!string.IsNullOrWhiteSpace(elementSelector))
            {
                query = query.Select(elementSelector);
            }

            return(Queryable.Sum((dynamic)query));
        }
Exemple #30
0
 public List <Widget> GetWidgetsFor(int planId = 0)
 {
     if (planId > 0)
     {
         return(Queryable.Where(_context.Widget, u => Enumerable.Any <WidgetPlan>(u.WidgetPlans, i => i.PlanId == planId))
                .ToList());
     }
     return(GetWidgets());
 }
        public virtual object LastOrDefault(IQueryable query, string predicate)
        {
            if (!string.IsNullOrWhiteSpace(predicate))
            {
                query = Where(query, predicate);
            }

            return(Queryable.LastOrDefault((dynamic)query));
        }
Exemple #32
0
 public async Task <List <Widget> > GetWidgetsForAsync(int planId = 0)
 {
     if (planId > 0)
     {
         return(await Queryable.Where(_context.Widget, u => Enumerable.Any <WidgetPlan>(u.WidgetPlans, i => i.PlanId == planId))
                .ToListAsync());
     }
     return(await GetWidgetsAsync());
 }
        public void WhenEntitiesAreQueried_ResultsArePutInScopedCache()
        {
            // Arrange
            var permission = new Lazy<Permission, PermissionMetadata>(() => new ViewPermission(), new PermissionMetadata(new Dictionary<string, object>()));
            var userGroup = CoreCmsData.RequiredCoreUserGroups(Enumerable.Repeat(permission, 1)).FirstOrDefault(x => x.Name == "Administrator");
            Assert.NotNull(userGroup);
            using (var uow = GroupUnitFactory.Create())
            {
                uow.Repositories.AddOrUpdate(new SystemRoot());
                uow.Repositories.AddOrUpdate(Framework.Security.Model.FixedEntities.UserGroupVirtualRoot);
                uow.Repositories.AddOrUpdate(userGroup);
                uow.Complete();
            }

            // Assert - check single result
            using (var uow = GroupUnitFactory.Create())
            {
                // Cause the task to be fired
                Expression<Func<UserGroup, bool>> expression = x => x.Name == "Administrator";
                var getAdminByName = uow.Repositories.Query<UserGroup>().FirstOrDefault(expression);
                Assert.NotNull(getAdminByName);

                // Generate what should be an exact-same QueryDescription for the above query, to check the cache
                var executor = new Executor(uow.Repositories.QueryableDataSource, Queryable<UserGroup>.GetBinderFromAssembly());
                var queryable = new Queryable<UserGroup>(executor);
                queryable.FirstOrDefault(expression);
                var description = executor.LastGeneratedDescription;

                // Assert the task has been fired
                Assert.That(uow.UnitScopedCache.GetOrCreate(new QueryDescriptionCacheKey(description), () => null), Is.Not.Null);
            }

            // Assert - check many results
            using (var uow = GroupUnitFactory.Create())
            {
                // Cause the task to be fired
                Expression<Func<UserGroup, bool>> expression = x => x.Name == "Administrator";
                var getAdminByName = uow.Repositories.Query<UserGroup>().Where(expression).ToList();
                Assert.NotNull(getAdminByName.FirstOrDefault());

                // Generate what should be an exact-same QueryDescription for the above query, to check the cache
                var executor = new Executor(uow.Repositories.QueryableDataSource, Queryable<UserGroup>.GetBinderFromAssembly());
                var queryable = new Queryable<UserGroup>(executor);
                queryable.Where(expression).ToList();
                var description = executor.LastGeneratedDescription;

                // Assert the task has been fired
                Assert.That(uow.UnitScopedCache.GetOrCreate(new QueryDescriptionCacheKey(description), () => null), Is.Not.Null);
            }
        }
Exemple #34
0
        /// <summary>
        /// 拉姆达表达示
        /// </summary>
        private void QueryableDemo()
        {
            using (var db = SugarDao.GetInstance())
            {
                db.IsNoLock = true;

                //查询所有
                var student = db.Queryable<Student>().ToList();
                var studentDynamic = db.Queryable<Student>().ToDynamic();
                var studentJson = db.Queryable<Student>().ToJson();

                //查询单条
                var single = db.Queryable<Student>().Single(c => c.id == 1);
                //查询单条根据主键
                var singleByPk = db.Queryable<Student>().InSingle(1);
                //查询单条没有记录返回空对象
                var singleOrDefault = db.Queryable<Student>().SingleOrDefault(c => c.id == 11111111);
                //查询单条没有记录返回空对象
                var single2 = db.Queryable<Student>().Where(c => c.id == 1).SingleOrDefault();
                //查询所有的Id
                var singleFieldList = db.Queryable<Student>().Select<int>(it=>it.id).ToList();

                //查询第一条
                var first = db.Queryable<Student>().Where(c => c.id == 1).First();
                var first2 = db.Queryable<Student>().Where(c => c.id == 1).FirstOrDefault();

                //取11-20条
                var page1 = db.Queryable<Student>().Where(c => c.id > 10).OrderBy(it => it.id).Skip(10).Take(10).ToList();

                //取11-20条  等于 Skip(pageIndex-1)*pageSize).Take(pageSize) 等于  between (pageIndex-1)*pageSize and  pageIndex*pageSize
                var page2 = db.Queryable<Student>().Where(c => c.id > 10).OrderBy(it => it.id).ToPageList(2, 10);

                //取11-20条并且返回PageCount
                int pageCount = 0;
                var page3 = db.Queryable<Student>().Where(c => c.id > 10).OrderBy(it => it.id).ToPageList(2, 10, ref pageCount);

                //查询条数
                var count = db.Queryable<Student>().Where(c => c.id > 10).Count();

                //从第2条开始以后取所有
                var skip = db.Queryable<Student>().Where(c => c.id > 10).OrderBy(it => it.id).Skip(2).ToList();

                //取前2条
                var take = db.Queryable<Student>().Where(c => c.id > 10).OrderBy(it => it.id).Take(2).ToList();

                //Not like
                string conval = "a";
                var notLike = db.Queryable<Student>().Where(c => !c.name.Contains(conval.ToString())).ToList();

                //Like
                conval = "三";
                var like = db.Queryable<Student>().Where(c => c.name.Contains(conval)).ToList();

                //支持字符串Where 让你解决,更复杂的查询
                var student12 = db.Queryable<Student>().Where(c => "a" == "a").Where("id>@id", new { id = 1 }).ToList();
                var student13 = db.Queryable<Student>().Where(c => "a" == "a").Where("id>100 and id in( select 1)").ToList();

                //存在记录反回true,则否返回false
                bool isAny100 = db.Queryable<Student>().Any(c => c.id == 100);
                bool isAny1 = db.Queryable<Student>().Any(c => c.id == 1);

                //获取最大Id
                object maxId = db.Queryable<Student>().Max(it => it.id);
                int maxId1 = db.Queryable<Student>().Max(it => it.id).ObjToInt();//拉姆达
                int maxId2 = db.Queryable<Student>().Max<int>("id"); //字符串写法

                //获取最小
                int minId1 = db.Queryable<Student>().Where(c => c.id > 0).Min(it => it.id).ObjToInt();//拉姆达
                int minId2 = db.Queryable<Student>().Where(c => c.id > 0).Min<int>("id");//字符串写法

                //order By
                var orderList = db.Queryable<Student>().OrderBy("id desc,name asc").ToList();//字符串支持多个排序
                //可以多个order by表达示
                var order2List = db.Queryable<Student>().OrderBy(it => it.name).OrderBy(it => it.id, OrderByType.Desc).ToList(); // order by name as ,order by id desc

                //In
                var intArray = new[] { "5", "2", "3" };
                var intList = intArray.ToList();
                var listnew = db.Queryable<Student>().Where(it => intArray.Contains(it.name)).ToList();
                var list0 = db.Queryable<Student>().In(it => it.id, 1, 2, 3).ToList();
                var list1 = db.Queryable<Student>().In(it => it.id, intArray).ToList();
                var list2 = db.Queryable<Student>().In("id", intArray).ToList();
                var list3 = db.Queryable<Student>().In(it => it.id, intList).ToList();
                var list4 = db.Queryable<Student>().In("id", intList).ToList();
                var list6 = db.Queryable<Student>().In(intList).ToList();//不设置字段默认主键

                //分组查询
                var list7 = db.Queryable<Student>().Where(c => c.id < 20).GroupBy(it => it.sex).Select("sex,count(*) Count").ToDynamic();
                var list8 = db.Queryable<Student>().Where(c => c.id < 20).GroupBy(it => it.sex).GroupBy(it => it.id).Select("id,sex,count(*) Count").ToDynamic();
                List<StudentGroup> list9 = db.Queryable<Student>().Where(c => c.id < 20).GroupBy(it => it.sex).Select<StudentGroup>("Sex,count(*) Count").ToList();
                List<StudentGroup> list10 = db.Queryable<Student>().Where(c => c.id < 20).GroupBy("sex").Select<StudentGroup>("Sex,count(*) Count").ToList();
                //SELECT Sex,Count=count(*)  FROM Student  WHERE 1=1  AND  (id < 20)    GROUP BY Sex --生成结果

                //2表关联查询
                var jList = db.Queryable<Student>()
                .JoinTable<School>((s1, s2) => s1.sch_id == s2.id) //默认left join
                .Where<School>((s1, s2) => s1.id == 1)
                .Select("s1.*,s2.name as schName")
                .ToDynamic();

                /*等于同于
                 SELECT s1.*,s2.name as schName
                 FROM [Student]  s1
                 LEFT JOIN [School]  s2 ON  s1.sch_id  = s2.id
                 WHERE  s1.id  = 1 */

                //2表关联查询并分页
                var jList2 = db.Queryable<Student>()
                .JoinTable<School>((s1, s2) => s1.sch_id == s2.id) //默认left join
                    //如果要用inner join这么写
                    //.JoinTable<School>((s1, s2) => s1.sch_id == s2.id ,JoinType.INNER)
                .Where<School>((s1, s2) => s1.id > 1)
                .OrderBy(s1 => s1.name)
                .Skip(10)
                .Take(20)
                .Select("s1.*,s2.name as schName")
                .ToDynamic();

                //3表查询并分页
                var jList3 = db.Queryable<Student>()
               .JoinTable<School>((s1, s2) => s1.sch_id == s2.id) // left join  School s2  on s1.id=s2.id
               .JoinTable<School>((s1, s3) => s1.sch_id == s3.id) // left join  School s3  on s1.id=s3.id
               .Where<School>((s1, s2) => s1.id > 1)  // where s1.id>1
               .Where(s1 => s1.id > 0)
               .OrderBy<School>((s1, s2) => s1.id) //order by s1.id 多个order可以  .oderBy().orderby 叠加
               .Skip(10)
               .Take(20)
               .Select("s1.*,s2.name as schName,s3.name as schName2")//select目前只支持这种写法
               .ToDynamic();

                //上面的方式都是与第一张表join,第三张表想与第二张表join写法如下
                List<V_Student> jList4 =
                 db.Queryable<Student>()
                 .JoinTable<School>((s1, s2) => s1.sch_id == s2.id) // left join  School s2  on s1.id=s2.id
                 .JoinTable<School, Area>((s1, s2, a1) => a1.id == s2.AreaId)// left join  Area a1  on a1.id=s2.AreaId  第三张表与第二张表关联
                 .JoinTable<Area, School>((s1, a1, s3) => a1.id == s3.AreaId)// left join  School s3  on a1.id=s3.AreaId  第四第表第三张表关联
                 .JoinTable<School>((s1, s4) => s1.sch_id == s4.id) // left join  School s2  on s1.id=s4.id
                 .Select<School, Area, V_Student>((s1, s2, a1) => new V_Student { id = s1.id, name = s1.name, SchoolName = s2.name, AreaName = a1.name }).ToList();

                //等同于
                //SELECT id = s1.id, name = s1.name, SchoolName = s2.name, AreaName = a1.name
                //FROM [Student]   s1
                //LEFT JOIN School  s2 ON  ( s1.sch_id  = s2.id )
                //LEFT JOIN Area  a1 ON  ( a1.id  = s2.AreaId )     //第三张表与第二张表关联
                //LEFT JOIN School  s3 ON  ( a1.id  = s3.AreaId )   //第四张表与第三张表关联
                //LEFT JOIN School  s4 ON  ( s1.sch_id  = s4.id )
                //WHERE 1=1

                //Join子查询语句加分页的写法
                var childQuery = db.Queryable<Area>().Where("id=@id").Select(it => new { id = it.id,name=it.name }).ToSql();//创建子查询SQL
                string childTableName =SqlSugarTool.PackagingSQL(childQuery.Key);//将SQL语句用()包成表
                var queryable = db.Queryable<Student>()
                 .JoinTable<School>((s1, s2) => s1.sch_id == s2.id)  //LEFT JOIN School  s2 ON  ( s1.sch_id  = s2.id )
                 .JoinTable(childTableName, "a1", "a1.id=s2.areaid", new { id = 1 }, JoinType.Inner) //INNER JOIN (SELECT *  FROM [Area]   WHERE 1=1  AND id=@id   ) a1 ON a1.id=s2.areaid
                 .OrderBy(s1 => s1.id);

                var list = queryable.Select<School, Area, V_Student>((s1, s2, a1) => new V_Student { id = s1.id, name = s1.name, SchoolName = s2.name, AreaName = a1.name })
                    .ToPageList(0, 200);
                var count2 = queryable.Count();

                //拼接例子
                var queryable2 = db.Queryable<Student>().Where(it => true);
                if (maxId.ObjToInt() == 1)
                {
                    queryable2.Where(it => it.id == 1);
                }
                else
                {
                    queryable2.Where(it => it.id == 2);
                }
                var listJoin = queryable2.ToList();

                //queryable和SqlSugarClient解耦
                var par = new Queryable<Student>().Where(it => it.id == 1);//声名没有connection对象的Queryable
                par.DB = db;
                var listPar = par.ToList();

                //查看生成的sql和参数
                var id = 1;
                var sqlAndPars = db.Queryable<Student>().Where(it => it.id == id).OrderBy(it => it.id).ToSql();

                //拉姆达支持的函数操作
                var par1 = "2015-1-1"; var par2 = "   我 有空格A, ";
                var r1 = db.Queryable<Student>().Where(it => it.name == par1.ObjToString()).ToList(); //ObjToString会将null转转成""
                var r2 = db.Queryable<InsertTest>().Where(it => it.d1 == par1.ObjToDate()).ToList();
                var r3 = db.Queryable<InsertTest>().Where(it => it.id == 1.ObjToInt()).ToList();//ObjToInt会将null转转成0
                var r4 = db.Queryable<InsertTest>().Where(it => it.id == 2.ObjToDecimal()).ToList();
                var r5 = db.Queryable<InsertTest>().Where(it => it.id == 3.ObjToMoney()).ToList();
                var r6 = db.Queryable<InsertTest>().Where(it => it.v1 == par2.Trim()).ToList();
                var convert1 = db.Queryable<Student>().Where(c => c.name == "a".ToString()).ToList();
                var convert2 = db.Queryable<Student>().Where(c => c.id == Convert.ToInt32("1")).ToList();
                var convert3 = db.Queryable<Student>().Where(c => c.name == par2.ToLower()).ToList();
                var convert4 = db.Queryable<Student>().Where(c => c.name == par2.ToUpper()).ToList();
                var convert5= db.Queryable<Student>().Where(c => DateTime.Now > Convert.ToDateTime("2015-1-1")).ToList();
                var c1 = db.Queryable<Student>().Where(c => c.name.Contains("a")).ToList();
                var c2 = db.Queryable<Student>().Where(c => c.name.StartsWith("a")).ToList();
                var c3 = db.Queryable<Student>().Where(c => c.name.EndsWith("a")).ToList();
                var c4 = db.Queryable<Student>().Where(c => !string.IsNullOrEmpty(c.name)).ToList();
                var c5 = db.Queryable<Student>().Where(c => c.name.Equals("小杰")).ToList();
                var c6 = db.Queryable<Student>().Where(c => c.name.Length > 4).ToList();
                var time = db.Queryable<InsertTest>().Where(c => c.d1>DateTime.Now.AddDays(1)).ToList();
                var time2 = db.Queryable<InsertTest>().Where(c => c.d1 > DateTime.Now.AddYears(1)).ToList();
                var time3 = db.Queryable<InsertTest>().Where(c => c.d1 > DateTime.Now.AddMonths(1)).ToList();
            }
        }