コード例 #1
0
ファイル: QueryBody.cs プロジェクト: ym9288/NetModular
        public void SetGroupBy(Expression expression)
        {
            GroupBy   = expression as LambdaExpression;
            IsGroupBy = true;

            GroupByPropertyList = new List <GroupByJoinDescriptor>();
            var lambda = expression as LambdaExpression;

            if (lambda.Body.NodeType != ExpressionType.New)
            {
                throw new ArgumentException("分组条件必须使用匿名类new{}");
            }

            var newExp = lambda.Body as NewExpression;

            for (var i = 0; i < newExp.Members.Count; i++)
            {
                var alias          = newExp.Members[i].Name;
                var member         = newExp.Arguments[0] as MemberExpression;
                var parameter      = member.Expression as ParameterExpression;
                var joinDescriptor = JoinDescriptors.FirstOrDefault(m => m.EntityDescriptor.EntityType == parameter.Type);
                GroupByPropertyList.Add(new GroupByJoinDescriptor
                {
                    Name           = member.Member.Name,
                    Alias          = alias,
                    JoinDescriptor = joinDescriptor
                });
            }
        }
コード例 #2
0
        public string GetColumnName(MemberExpression exp)
        {
            var descriptor = JoinDescriptors.First(m => m.EntityDescriptor.EntityType == exp.Expression.Type);
            var col        = descriptor.EntityDescriptor.Columns.FirstOrDefault(m => m.PropertyInfo.Name.Equals(exp.Member.Name));

            Check.NotNull(col, nameof(col), $"({exp.Member.Name})列不存在");

            return($"{_sqlAdapter.AppendQuote(descriptor.Alias)}.{_sqlAdapter.AppendQuote(col.Name)}");
        }
コード例 #3
0
ファイル: QueryBody.cs プロジェクト: kuiyouli/NetModular
        public void SetGroupBy(Expression expression)
        {
            IsGroupBy = true;
            if (expression != null)
            {
                GroupBy = expression as LambdaExpression;
                var lambda = expression as LambdaExpression;
                if (lambda != null && lambda.Body.NodeType != ExpressionType.New)
                {
                    throw new ArgumentException("分组条件必须使用匿名类new{}");
                }

                if (lambda?.Body is NewExpression newExp)
                {
                    for (var i = 0; i < newExp.Members.Count; i++)
                    {
                        var alias = newExp.Members[i].Name;
                        if (newExp.Arguments[i] is MemberExpression member)
                        {
                            var parameter      = member.Expression as ParameterExpression;
                            var joinDescriptor = JoinDescriptors.FirstOrDefault(m => parameter != null && m.EntityDescriptor.EntityType == parameter.Type);

                            GroupByPropertyList.Add(new GroupByJoinDescriptor
                            {
                                Name           = member.Member.Name,
                                Alias          = alias,
                                JoinDescriptor = joinDescriptor
                            });
                        }
                    }
                }
            }
            else
            {
                foreach (var joinDescriptor in JoinDescriptors)
                {
                    foreach (var column in joinDescriptor.EntityDescriptor.Columns)
                    {
                        GroupByPropertyList.Add(new GroupByJoinDescriptor
                        {
                            Name           = column.Name,
                            Alias          = column.PropertyInfo.Name,
                            JoinDescriptor = joinDescriptor
                        });
                    }
                }
            }
        }