/// <summary>
        /// Generate a query with the specified where statement
        /// </summary>
        /// <typeparam name="TProperty"></typeparam>
        /// <param name="propertyExpression">Property to query</param>
        /// <param name="comparison">Comparison type</param>
        /// <param name="value">Value to compare to</param>
        /// <returns></returns>
        protected FluentQueryBuilder <T> Where <TProperty>(Expression <Func <T, TProperty> > propertyExpression, Comparison comparison, object value)
        {
            FluentQueryBuilder <T> builder = new FluentQueryBuilder <T>(Mappings);

            builder.AddWhereCondition(propertyExpression, comparison, value);
            return(builder);
        }
예제 #2
0
        /// <summary>
        /// Return all rows matching the queryin FluentQueryBuilder
        /// </summary>
        /// <param name="builder">FluentQueryBuilder</param>
        /// <returns></returns>
        protected List <T> GetEntities(FluentQueryBuilder <T> builder)
        {
            QueryBuilder  query           = GetQueryBuilder();
            List <string> whereStatements = new List <string>();
            int           index           = 1;

            foreach (WhereCondition whereCondition in builder.WhereConditions)
            {
                if (whereCondition.IsNullEqualsOrNotEquals())
                {
                    whereStatements.Add(TableName + "." + whereCondition.ColumnName + " " + whereCondition.GetComparisonString() + " NULL");
                }
                else
                {
                    whereStatements.Add(TableName + "." + whereCondition.ColumnName + " " + whereCondition.GetComparisonString() + " " + DbAdapter.GetParameterPlaceholder(whereCondition.ColumnName, index));
                    query.AddParameter(DbAdapter.GetParameterName(whereCondition.ColumnName, index), whereCondition.GetParameterValue());
                }
                index++;
            }
            query.SqlQuery += $"WHERE {string.Join(" AND ", whereStatements)} ";

            if (builder.OrderStatements != null && builder.OrderStatements.Any())
            {
                List <string> orderBy = new List <string>();
                foreach (OrderStatement orderStatement in builder.OrderStatements)
                {
                    orderBy.Add(orderStatement.ColumnName + (orderStatement.IsAscending ? "" : " DESC"));
                }
                query.SqlQuery += $"ORDER BY {TableName}.{string.Join(",", orderBy)} ";
            }

            if (builder.Limit.HasValue || builder.Offset.HasValue)
            {
                query.SqlQuery += DbAdapter.GetLimitOffsetStatement(builder.Limit, builder.Offset, query);
            }
            return(GetEntities(query));
        }
예제 #3
0
 /// <summary>
 /// Returns the first row from the database
 /// </summary>
 /// <param name="builder">FluentQueryBuilder</param>
 /// <returns></returns>
 protected T GetSingleEntity(FluentQueryBuilder <T> builder)
 {
     return(GetEntities(builder).FirstOrDefault());
 }