private MemberInfo FindMemberSetByParameter(SelectQueryData.JoinSpec join, int paramIndex) { var newExpr = join.ResultSelector.Body as NewExpression; if (newExpr != null) { var index = newExpr.Arguments.TakeWhile(a => a != join.ResultSelector.Parameters[paramIndex]).Count(); if (index < newExpr.Members.Count) { return(newExpr.Members[index]); } } return(null); }
private string GetJoinClauseText(SelectQueryData.JoinSpec join) { var alias = subQueryPrefix + join.ResultSelector.Parameters[1].Name; var member = FindMemberSetByParameter(join, 1); if (member != null) { aliases[member] = alias; } string innerData = "[" + nameResolver.ResolveTableName(join.InnerData.ModelType) + "]"; var clause = string.Format(" {0} JOIN {1} [{2}] ON {3} = {4}", join.JoinType, GetJoinSourceSql(join.InnerData), alias, GetOuterKeyColumn(join.OuterKeySelector.Body), GetInnerKeyColumn(join.InnerKeySelector.Body, alias)); if (lastTableAlias != null) { lastTableAlias = alias; } return(clause); }