Show / Hide Table of Contents

    SqlHavingAttribute Class

    .NET Standard 2.x

    Denotes that a model class should use a search condition for a group or an aggregate.

    Namespace: SnapObjects.Data

    Assembly: SnapObjects.Data.dll

    Inherited Constructor

    SnapObjects.Data.SqlWhereAttribute

    Syntax

       [AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct)]
       public class SqlHavingAttribute : SqlWhereAttribute
    

    Constructors

    Name Description
    SqlHavingAttribute(string rawCondition) Initializes a new instance of the SqlHavingAttribute class.
    SqlHavingAttribute(string left, string right) Initializes a new instance of the SqlHavingAttribute class.

    Properties

    Name Return Type Description
    Left string Gets the raw SQL expression on the left of the operator.
    Operator SqlBinaryOperator Gets or sets the operator to test the two expression on the left and right.
    RawCondition string Gets the string of the raw SQL search condition if it has been specified in the constructor.
    RawConditionDefined bool Gets whether the raw SQL search condition has been specified in the constructor.
    Right string Gets the raw SQL expression on the right of the operator.

    Remarks

    The SqlHaving attribute is typically used with the SqlGroupBy attribute.

    The SqlHaving attribute denotes that a model class should use a HAVING clause in the SQL SELECT statement to define the search condition for a group or an aggregate.

    Examples

    The following code example demonstrates how to use the SqlHaving attribute. It applies the SqlHaving attribute to the StudentGradeSqlHaving class to add a HAVING clause to the SQL SELECT statement, to define the search condition for the group.

    Model: StudentGradeSqlHaving
    using SnapObjects.Data;
    using System;
    using System.ComponentModel.DataAnnotations.Schema;
    
    namespace Appeon.ApiDoc.Models.School
    {
        /// <summary>
        /// This model class maps to the dbo.StudentGrade table.
        /// </summary>
        [Table("StudentGrade", Schema = "dbo")]
        [SqlGroupBy("StudentID")]
        [SqlHaving("Sum(Grade) is not null")]
        [SqlAndHaving("Sum(Grade) < 5")]
        [SqlAndHaving("Sum(Grade)", "2", Operator = SqlBinaryOperator.GreaterThan)]
    
        public class StudentGradeSqlHaving
        {
            public int StudentID { get; set; }
    
            [SqlCompute(alias: "SumGrade", expression: "Sum(Grade)")]
            public decimal? SumGrade { get; set; }
    
        }
    }
    
    Example Method:
    using SnapObjects.Data;
    using Appeon.ApiDoc.Models.School;
    using System;
    
    namespace Appeon.ApiDoc.SqlHavingAttributeExamples
    {
        public class SqlHavingAttributeExample
        {
            private SchoolContext _context;
    
            public SqlHavingAttributeExample(SchoolContext dataContext)
            {
                // Sets the data context.
                _context = dataContext;
            }
    
            public void Example()
            {
                // Gets the SQL statement.
                string sql = ModelSqlBuilder.GetBuilder<StudentGradeSqlHaving>(_context).QuerySql;
    
                Console.WriteLine("SQL statement:");
                Console.WriteLine(sql);
    
                // Executes the SQL statement.
                var resultSet = _context.SqlExecutor.Select<StudentGradeSqlHaving>(sql);
    
                /* This code example produces the following output:
                
                SQL statement:
                SELECT
                 [StudentID],
                SUM([Grade]) AS [SumGrade]
                FROM [dbo].[StudentGrade]
                GROUP BY
                 [StudentID]
                HAVING (SUM([Grade]) IS NOT NULL
                AND SUM([Grade]) < 5
                AND SUM([Grade]) > = 2)
                */
            }
        }
    }
    

    Applies to

    .NET Standard

    2.x

    Back to top Generated by Appeon