Esempio n. 1
0
        /// <summary>
        /// 创建关联一个强类型查询
        /// </summary>
        /// <typeparam name="TJoin"></typeparam>
        /// <typeparam name="TJoinResult"></typeparam>
        /// <param name="resultSelect"></param>
        /// <param name="expression"></param>
        /// <param name="joinType"></param>
        /// <returns></returns>
        public LambdaQueryViewJoin <T, TJoin, TJoinResult> Join <TJoin, TJoinResult>(LambdaQueryResultSelect <TJoin, TJoinResult> resultSelect, Expression <Func <T, TJoinResult, bool> > expression, JoinType joinType = JoinType.Inner)
        {
            if (!resultSelect.BaseQuery.__FromDbContext)
            {
                throw new CRLException("关联需要由LambdaQuery.CreateQuery创建");
            }
            var query2    = new LambdaQueryViewJoin <T, TJoin, TJoinResult>(this, resultSelect);
            var innerType = typeof(TJoin);
            //__JoinTypes.Add(new TypeQuery(innerType, "T_" + prefixIndex), joinType);
            var prefix1   = GetPrefix(innerType);
            var prefix2   = GetPrefix(typeof(TJoinResult));
            var typeQuery = new TypeQuery(innerType, prefix2);
            var baseQuery = resultSelect.BaseQuery;

            foreach (var kv in baseQuery.QueryParames)
            {
                QueryParames[kv.Key] = kv.Value;
            }
            string innerQuery = baseQuery.GetQuery();

            typeQuery.InnerQuery = innerQuery;
            string condition = FormatJoinExpression(expression.Body);

            AddInnerRelation(typeQuery, joinType, condition);
            return(query2);
        }
Esempio n. 2
0
        /// <summary>
        /// 创建关联一个强类型查询
        /// </summary>
        /// <typeparam name="TJoinResult"></typeparam>
        /// <param name="resultSelect"></param>
        /// <param name="expression"></param>
        /// <param name="joinType"></param>
        /// <returns></returns>
        public ILambdaQueryViewJoin <T, TJoinResult> Join <TJoinResult>(ILambdaQueryResultSelect <TJoinResult> resultSelect, Expression <Func <T, TJoinResult, bool> > expression, JoinType joinType = JoinType.Inner)
        {
            if (!resultSelect.BaseQuery.__FromDbContext)
            {
                throw new Exception("关联需要由LambdaQuery.CreateQuery创建");
            }
            var query2 = new LambdaQueryViewJoin <T, TJoinResult>(this, resultSelect);
            //var innerType = typeof(TSource);
            var innerType = resultSelect.InnerType;

            //var prefix1 = GetPrefix(innerType);
            var prefix2   = GetPrefix(typeof(TJoinResult));
            var typeQuery = new TypeQuery(innerType, prefix2);
            var baseQuery = resultSelect.BaseQuery;

            QueryParames.AddRange(baseQuery.QueryParames);

            string innerQuery = baseQuery.GetQuery();

            typeQuery.InnerQuery = innerQuery;
            string condition = FormatJoinExpression(expression.Body);

            AddInnerRelation(typeQuery, joinType, condition);
            return(query2);
        }