Пример #1
0
        /// <summary>
        ///  确定序列是否包含任何元素。
        /// </summary>
        /// <typeparam name="T">表实体类型</typeparam>
        /// <param name="queryable">查询对象</param>
        /// <param name="expression">表达式条件</param>
        /// <returns>count>0返回true</returns>
        public static bool Any <T>(this  Queryable <T> queryable, Expression <Func <T, bool> > expression)
        {
            var type = queryable.Type;

            queryable.WhereIndex = queryable.WhereIndex + 100;
            ResolveExpress re = new ResolveExpress(queryable.WhereIndex);

            re.ResolveExpression(re, expression, queryable.DB);
            queryable.WhereValue.Add(re.SqlWhere);
            queryable.Params.AddRange(re.Paras);
            return(queryable.Count() > 0);
        }
Пример #2
0
        /// <summary>
        ///  返回序列的唯一元素;如果该序列并非恰好包含一个元素,否则返回null。
        /// </summary>
        /// <typeparam name="T">表实体类型</typeparam>
        /// <param name="queryable">查询对象</param>
        /// <param name="expression">表达式条件</param>
        /// <returns>T</returns>
        public static T SingleOrDefault <T>(this  Queryable <T> queryable, Expression <Func <T, bool> > expression)
        {
            var type = queryable.Type;

            queryable.WhereIndex = queryable.WhereIndex + 100;
            ResolveExpress re = new ResolveExpress(queryable.WhereIndex);

            re.ResolveExpression(re, expression, queryable.DB);
            queryable.WhereValue.Add(re.SqlWhere);
            queryable.Params.AddRange(re.Paras);
            return(queryable.ToList().SingleOrDefault());
        }
Пример #3
0
        /// <summary>
        /// 条件筛选
        /// </summary>
        /// <typeparam name="T">表实体类型</typeparam>
        /// <typeparam name="T2">表实体类型</typeparam>
        /// <typeparam name="T3">表实体类型</typeparam>
        /// <typeparam name="T4">表实体类型</typeparam>
        /// <typeparam name="T5">表实体类型</typeparam>
        /// <param name="queryable">查询对象</param>
        /// <param name="expression">表达式条件</param>
        /// <returns>Queryable</returns>
        public static Queryable <T> Where <T, T2, T3, T4, T5>(this Queryable <T> queryable, Expression <Func <T, T2, T3, T4, T5, bool> > expression)
        {
            var type = queryable.Type;

            queryable.WhereIndex = queryable.WhereIndex + 100;
            ResolveExpress re = new ResolveExpress(queryable.WhereIndex);

            re.Type = ResolveExpressType.nT;
            re.ResolveExpression(re, expression, queryable.DB);
            queryable.Params.AddRange(re.Paras);
            queryable.WhereValue.Add(re.SqlWhere);
            return(queryable);
        }
Пример #4
0
        /// <summary>
        /// 联表查询
        /// </summary>
        /// <typeparam name="T">第一个表的对象</typeparam>
        /// <typeparam name="T2">联接表的对象</typeparam>
        /// <typeparam name="T3">联接表的对象</typeparam>
        /// <param name="queryable">查询对象</param>
        /// <param name="expression">条件表达式</param>
        /// <param name="type">Join的类型</param>
        /// <returns>Queryable</returns>
        public static Queryable <T> JoinTable <T, T2, T3>(this Queryable <T> queryable, Expression <Func <T, T2, T3, object> > expression, JoinType type = JoinType.LEFT)
        {
            queryable.DB.InitAttributes <T3>();

            ResolveExpress re = new ResolveExpress();

            queryable.WhereIndex = queryable.WhereIndex + 100;
            re.Type = ResolveExpressType.nT;
            var exLeftStr   = Regex.Match(expression.ToString(), @"\((.+?)\).+").Groups[1].Value;
            var exLeftArray = exLeftStr.Split(',');
            var shortName1  = exLeftArray[1];
            var shortName2  = exLeftArray[2];

            re.ResolveExpression(re, expression, queryable.DB);
            string joinTypeName  = type.ToString();
            string joinTableName = null;

            if (queryable.DB._mappingTableList.IsValuable())
            {
                //别名表
                if (queryable.DB._mappingTableList.IsValuable())
                {
                    string name = typeof(T3).Name;
                    if (queryable.DB._mappingTableList.Any(it => it.Key == name))
                    {
                        joinTableName = queryable.DB._mappingTableList.First(it => it.Key == name).Value;
                    }
                }
            }
            if (joinTableName.IsNullOrEmpty())
            {
                joinTableName = typeof(T3).Name;
            }
            string joinStr = string.Format(" {0} JOIN {1} {2} ON {3}  ",
                                           /*0*/ queryable.JoinTableValue.Count == 0 ? (" " + shortName1 + " " + joinTypeName) : joinTypeName.ToString(),
                                           /*1*/ joinTableName.GetTranslationSqlName(),
                                           /*2*/ shortName2,
                                           /*3*/ re.SqlWhere.Trim().TrimStart('A').TrimStart('N').TrimStart('D')
                                           );

            queryable.JoinTableValue.Add(joinStr);
            queryable.Params.AddRange(re.Paras);
            return(queryable);
        }