Esempio n. 1
0
        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);
        }
Esempio n. 2
0
        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;
        }
Esempio n. 3
0
        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;
        }