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