Show / Hide Table of Contents

    SqlUnionAttribute Class

    .NET Standard 2.x

    Denotes that a model class should combine the results of two or more queries into one single result. One or more SqlUnion attributes can be applied to one model class.

    Namespace: SnapObjects.Data

    Assembly: SnapObjects.Data.dll

    Inheritance Constructor

    System.Attribute

    Syntax

       [AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct, AllowMultiple = true)]
       public class SqlUnionAttribute : Attribute, ISqlUnion
    

    Constructors

    Name Description
    SqlUnionAttribute(string rawSql) Initializes a new instance of the SqlUnionAttribute class.
    SqlUnionAttribute(Type modelType) Initializes a new instance of the SqlUnionAttribute class.
    SqlUnionAttribute(Type modelType, string selectName) Initializes a new instance of the SqlUnionAttribute class.

    Properties

    Name Return Type Description
    IsRawSql bool Gets whether a raw SQL has been specified for the union operation.
    ModelType Type Gets the type of the model that is specified for the union operator.
    RawSql string Gets the raw SQL specified for the union operator.
    SelectName string Gets the name of the select list (SqlSelectAttribute.SelectName) predefined in the model type specified by the union operator.
    UnionAll bool Gets or sets whether to use UNION ALL.

    Remarks

    The SqlUnion attribute denotes that a model class should use an UNION operator in the SQL SELECT statement to combine the results of two or more queries into one single result.

    Examples

    Example 1

    The following code example demonstrates how to use the SqlUnion attribute to specify a raw SQL SELECT whose result set will be combined with the current SQL query.

    Model: DepartmentSqlUnion
    using SnapObjects.Data;
    using System;
    
    namespace Appeon.ApiDoc.Models.School
    {
        /// <summary>
        /// This model class maps to the dbo.Department and dbo.Person tables.
        /// </summary>
        [FromTable("Department", Schema = "dbo")]
        [SqlUnion("select LastName as Name from person")]
        public class DepartmentSqlUnion
        {
            public string Name { get; set; }
    
        }
    }
    
    Example Method: Example1
    using SnapObjects.Data;
    using Appeon.ApiDoc.Models.School;
    using System;
    
    namespace Appeon.ApiDoc.SqlUnionAttributeExamples
    {
        public class SqlUnionAttributeExample
        {
            private SchoolContext _context;
    
            public SqlUnionAttributeExample(SchoolContext dataContext)
            {
                // Sets the data context.
                _context = dataContext;
            }
    
            public void Example1()
            {
                // Gets the SQL statement.           
                string sql = ModelSqlBuilder.GetBuilder<DepartmentSqlUnion>(_context).QuerySql;
    
                Console.WriteLine("SQL statement:");
                Console.WriteLine(sql);
    
                // Executes the SQL statement.
                var result = _context.SqlExecutor.Select<DepartmentSqlUnion>(sql);
    
                /* This code example produces the following output:
                
                SQL statement:
                SELECT
                    [Name]
                FROM [dbo].[Department]
                UNION SELECT
                    [LastName] AS [Name]
                FROM [person]
                */
            }
        }
    }
    

    Example 2

    The following code example demonstrates how to use the SqlUnion attribute to specify a model class whose SQL SELECT statement will be combined with the current SQL SELECT statement.

    Model: DepartmentSqlUnion2
    using SnapObjects.Data;
    using System;
    
    namespace Appeon.ApiDoc.Models.School
    {
        /// <summary>
        /// This model class maps to the dbo.Department and dbo.Person tables.
        /// </summary>
        [FromTable("Department", Schema = "dbo")]
        [SqlUnion(typeof(PersonSqlUnion4), UnionAll = true)]
        public class DepartmentSqlUnion2
        {
            public string Name { get; set; }
    
        }
    }
    
    Model: PersonSqlUnion4
    using System;
    using System.ComponentModel.DataAnnotations;
    using System.ComponentModel.DataAnnotations.Schema;
    using SnapObjects.Data;
    
    namespace Appeon.ApiDoc.Models.School
    {
        /// <summary>
        /// This model class maps to the dbo.Person table.
        /// </summary>
        [Table("Person", Schema = "dbo")]
        [UpdateWhereStrategy(UpdateWhereStrategy.KeyColumns)]
        public class PersonSqlUnion4
        {        
            [SqlColumn("Person", "LastName")]
            public string Name { get; set; }
    
        }
    }
    
    Example Method: Example2
            public void Example2()
            {
                // Gets the SQL statement.          
                string sql = ModelSqlBuilder.GetBuilder<DepartmentSqlUnion2>(_context).QuerySql;
    
                Console.WriteLine("SQL statement:");
                Console.WriteLine(sql);
    
                // Executes the SQL statement.
                var result = _context.SqlExecutor.Select<DepartmentSqlUnion2>(sql);
    
                /* This code example produces the following output:
                
                SQL statement:
                SELECT
                 [Name]
                FROM [dbo].[Department]
                UNION ALL
                 SELECT
                 [Person].[LastName]
                FROM [dbo].[Person]
                */
            }
    

    Example 3

    The following code example demonstrates how to use the SqlUnion attribute to specify a model class whose SQL SELECT statement will be combined with the current SQL statement, and specify the predefined Select Name to change the Select list.

    Model: DepartmentSqlUnion3
    using SnapObjects.Data;
    using System;
    
    namespace Appeon.ApiDoc.Models.School
    {
        /// <summary>
        /// This model class maps to the dbo.Department table.
        /// </summary>
        [FromTable("Department", Schema = "dbo")]
        [SqlUnion(typeof(DepartmentSqlSelect), "sqlselectname", UnionAll = true)]
        public class DepartmentSqlUnion3
        {
            public string Name { get; set; }
    
        }
    }
    
    Model: DepartmentSqlSelect
    using SnapObjects.Data;
    using System;
    using System.ComponentModel.DataAnnotations;
    
    namespace Appeon.ApiDoc.Models.School
    {
        /// <summary>
        /// This model class maps to the dbo.Department table.
        /// </summary>
        [FromTable("Department", Schema = "dbo")]
        [SqlSelect("sqlselect", RawSelect = "DepartmentID, Name")]
        [SqlSelect("sqlselect2", RawSelect = "DepartmentID, Name, Budget, StartDate")]
        [SqlSelect("sqlselectname", RawSelect = "Name")]
    
        public class DepartmentSqlSelect
        {
            [Key]
            public int DepartmentID { get; set; }
    
            public string Name { get; set; }
    
            public decimal Budget { get; set; }
    
            public DateTime StartDate { get; set; }
    
            public int? Administrator { get; set; }
    
        }
    }
    
    Example Method: Example3
            public void Example3()
            {
                // Gets the SQL statement.          
                string sql = ModelSqlBuilder.GetBuilder<DepartmentSqlUnion3>(_context).QuerySql;
    
                Console.WriteLine("SQL statement:");
                Console.WriteLine(sql);
    
                // Executes the SQL statement.
                var result = _context.SqlExecutor.Select<DepartmentSqlUnion3>(sql);
    
                /* This code example produces the following output:
                
                SQL statement:
                SELECT
                 [Name]
                FROM [dbo].[Department]
                UNION ALL
                 SELECT
                 [Name]
                FROM [dbo].[Department]
                */
            }
    

    Applies to

    .NET Standard

    2.x

    Back to top Generated by Appeon