// Copyright (c) Microsoft Open Technologies, Inc. All rights reserved. See License.txt in the project root for license information. namespace System.Data.Entity.Query { using System.Data.Entity.Core.Common.CommandTrees.ExpressionBuilder; using System.Data.Entity.Core.Metadata.Edm; using System.Linq; using Xunit; public class QueryEnumTests : FunctionalTestBase { private static readonly string csdl = @" "; private static readonly string ssdl = @" "; private static readonly string msl = @" "; private static readonly MetadataWorkspace workspace = QueryTestHelpers.CreateMetadataWorkspace(csdl, ssdl, msl); [Fact] public void Simple_scan_with_Enum() { var entitySet = workspace.GetEntityContainer("MessageContainer", DataSpace.CSpace).GetEntitySetByName("MessageSet", false); var query = entitySet.Scan(); var expectedSql = "SELECT [Extent1].[Id] AS [Id], [Extent1].[MessageType] AS [MessageType]FROM [dbo].[Message] AS [Extent1]"; QueryTestHelpers.VerifyQuery(query, workspace, expectedSql); } [Fact] public void Scan_with_casting_Enum_to_integer() { var entitySet = workspace.GetEntityContainer("MessageContainer", DataSpace.CSpace).GetEntitySetByName("MessageSet", false); var query = entitySet.Scan() .Where( c => c.Property("Id").Equal( c.Property("MessageType").CastTo( TypeUsage.CreateDefaultTypeUsage(workspace.GetPrimitiveTypes(DataSpace.CSpace).Single(t => t.Name == "Int32"))))); var expectedSql = "SELECT [Extent1].[Id] AS [Id], [Extent1].[MessageType] AS [MessageType] FROM [dbo].[Message] AS [Extent1] WHERE [Extent1].[Id] = CAST( [Extent1].[MessageType] AS int)"; QueryTestHelpers.VerifyQuery(query, workspace, expectedSql); } [Fact] public void Constant_integer_based_Enum_in_where_clause() { var entitySet = workspace.GetEntityContainer("MessageContainer", DataSpace.CSpace).GetEntitySetByName("MessageSet", false); var query = entitySet.Scan() .Where(c => c.Property("MessageType").Equal(c.Property("MessageType").ResultType.Constant(-5))); var expectedSql = "SELECT [Extent1].[Id] AS [Id], [Extent1].[MessageType] AS [MessageType] FROM [dbo].[Message] AS [Extent1] WHERE [Extent1].[MessageType] = -5"; QueryTestHelpers.VerifyQuery(query, workspace, expectedSql); } public enum MessageType { Express, Priority, Ground }; [Fact] public void Constant_Enum_value_in_where_clause() { var entitySet = workspace.GetEntityContainer("MessageContainer", DataSpace.CSpace).GetEntitySetByName("MessageSet", false); var query = entitySet.Scan() .Where(c => c.Property("MessageType").Equal(c.Property("MessageType").ResultType.Constant(MessageType.Express))); var expectedSql = "SELECT [Extent1].[Id] AS [Id], [Extent1].[MessageType] AS [MessageType] FROM [dbo].[Message] AS [Extent1] WHERE [Extent1].[MessageType] = 0"; QueryTestHelpers.VerifyQuery(query, workspace, expectedSql); } [Fact] public void Null_Enum_value_in_where_clause() { var entitySet = workspace.GetEntityContainer("MessageContainer", DataSpace.CSpace).GetEntitySetByName("MessageSet", false); var query = entitySet.Scan() .Where(c => c.Property("MessageType").Equal(c.Property("MessageType").ResultType.Null())); var expectedSql = "SELECT [Extent1].[Id] AS [Id], [Extent1].[MessageType] AS [MessageType] FROM [dbo].[Message] AS [Extent1] WHERE [Extent1].[MessageType] = (CAST(NULL AS int))"; QueryTestHelpers.VerifyQuery(query, workspace, expectedSql); } } }