private StringBuilder CreateFromAndWhereHql(Type objectType, string criteriaString) { Guard.ArgumentNotNull(objectType, "objectType"); StringBuilder sb = new StringBuilder(); sb.AppendFormat(CultureInfo.InvariantCulture, "FROM {0} as m \r\n", objectType.Name); var metadata = this.GetMetadata().FirstOrDefault(md => md.Type == objectType); if (metadata != null) { string[] relationPropertyNames = metadata.Properties .Where(p => p.RelationType == RelationType.OneToMany || p.RelationType == RelationType.ManyToMany) .Select(p => p.Name) .ToArray(); foreach (var rp in relationPropertyNames) { var propertyInfo = objectType.GetProperty(rp); if (propertyInfo != null && !typeof(IEnumerable).IsAssignableFrom(propertyInfo.PropertyType)) { sb.AppendFormat(CultureInfo.InvariantCulture, "left join fetch m.{1}\r\n", objectType.Name, rp); } } } if (!string.IsNullOrWhiteSpace(criteriaString)) { CriteriaOperator criteria = CriteriaOperator.Parse(criteriaString); string hqlWhere = new NHWhereGenerator().Process(criteria); sb.AppendFormat(CultureInfo.InvariantCulture, "Where {0}\r\n", hqlWhere); } return(sb); }
private StringBuilder CreateFromAndWhereHql(Type objectType, string criteriaString) { Guard.ArgumentNotNull(objectType, "objectType"); StringBuilder sb = new StringBuilder(); sb.AppendFormat(CultureInfo.InvariantCulture, "FROM {0} as m \r\n", objectType.Name); var metadata = this.GetMetadata().FirstOrDefault(md => md.Type == objectType); if (metadata != null) { string[] relationPropertyNames = metadata.Properties .Where(p => p.RelationType == RelationType.OneToMany || p.RelationType == RelationType.ManyToMany) .Select(p => p.Name) .ToArray(); foreach (var rp in relationPropertyNames) { var propertyInfo = objectType.GetProperty(rp); if (propertyInfo != null && !typeof(IEnumerable).IsAssignableFrom(propertyInfo.PropertyType)) sb.AppendFormat(CultureInfo.InvariantCulture, "left join fetch m.{1}\r\n", objectType.Name, rp); } } if (!string.IsNullOrWhiteSpace(criteriaString)) { CriteriaOperator criteria = CriteriaOperator.Parse(criteriaString); string hqlWhere = new NHWhereGenerator().Process(criteria); sb.AppendFormat(CultureInfo.InvariantCulture, "Where {0}\r\n", hqlWhere); } return sb; }
private StringBuilder CreateFromAndWhereHql(Type objectType, IList<CriteriaOperator> members, string criteriaString, bool addSelect) { Guard.ArgumentNotNull(objectType, "objectType"); StringBuilder sb = new StringBuilder(); if (members != null && members.Count > 0) { sb.Append("select "); NHWhereGenerator whereGenerator = new NHWhereGenerator(); foreach (var member in members) { string memberName = whereGenerator.Process(member); string[] parts = memberName.Split(new[] { '.' }, 2); if (parts.Length == 1) sb.AppendFormat(CultureInfo.InvariantCulture, "m.{0},", memberName); else { sb.AppendFormat(CultureInfo.InvariantCulture, "{0},", memberName); } } sb.Length--; sb.Append(" "); } else if (addSelect) sb.Append(" select m "); sb.AppendFormat(CultureInfo.InvariantCulture, "FROM {0} as m \r\n", objectType.Name); var metadata = this.GetMetadata().FirstOrDefault(md => md.Type == objectType); foreach (var rp in metadata.Properties.Where(p => p.RelationType == RelationType.Reference)) { sb.AppendFormat(CultureInfo.InvariantCulture, "left join m.{0} as {0}\r\n", rp.Name); } if (metadata != null) { string[] relationPropertyNames = metadata.Properties .Where(p => p.RelationType == RelationType.OneToMany || p.RelationType == RelationType.ManyToMany) .Select(p => p.Name) .ToArray(); foreach (var rp in relationPropertyNames) { var propertyInfo = objectType.GetProperty(rp); if (propertyInfo != null && !typeof(IEnumerable).IsAssignableFrom(propertyInfo.PropertyType)) sb.AppendFormat(CultureInfo.InvariantCulture, "left join fetch m.{1}\r\n", objectType.Name, rp); } } if (!string.IsNullOrWhiteSpace(criteriaString)) { CriteriaOperator criteria = CriteriaOperator.Parse(criteriaString); string hqlWhere = new CriteriaToHqlConverter("m", objectType).Convert(criteria); sb.AppendFormat(CultureInfo.InvariantCulture, "Where {0}\r\n", hqlWhere); } return sb; }