/// <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); }
/// <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)); }
/// <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()); }