From cf8ad6f57795b9ff20a22f825d19953234f4a18c Mon Sep 17 00:00:00 2001 From: Simon Cropp Date: Tue, 13 Aug 2024 21:46:08 +1000 Subject: [PATCH] use switch for SqlServerDateOnlyMemberTranslator --- .../SqlServerDateOnlyMemberTranslator.cs | 40 +++++++++++-------- 1 file changed, 23 insertions(+), 17 deletions(-) diff --git a/src/EFCore.SqlServer/Query/Internal/Translators/SqlServerDateOnlyMemberTranslator.cs b/src/EFCore.SqlServer/Query/Internal/Translators/SqlServerDateOnlyMemberTranslator.cs index dfda2ddad35..27bbd7297a2 100644 --- a/src/EFCore.SqlServer/Query/Internal/Translators/SqlServerDateOnlyMemberTranslator.cs +++ b/src/EFCore.SqlServer/Query/Internal/Translators/SqlServerDateOnlyMemberTranslator.cs @@ -14,15 +14,6 @@ namespace Microsoft.EntityFrameworkCore.SqlServer.Query.Internal; /// public class SqlServerDateOnlyMemberTranslator : IMemberTranslator { - private static readonly Dictionary DatePartMapping - = new() - { - { nameof(DateOnly.Year), "year" }, - { nameof(DateOnly.Month), "month" }, - { nameof(DateOnly.DayOfYear), "dayofyear" }, - { nameof(DateOnly.Day), "day" } - }; - private readonly ISqlExpressionFactory _sqlExpressionFactory; /// @@ -47,12 +38,27 @@ public SqlServerDateOnlyMemberTranslator(ISqlExpressionFactory sqlExpressionFact MemberInfo member, Type returnType, IDiagnosticsLogger logger) - => member.DeclaringType == typeof(DateOnly) && DatePartMapping.TryGetValue(member.Name, out var datePart) - ? _sqlExpressionFactory.Function( - "DATEPART", - new[] { _sqlExpressionFactory.Fragment(datePart), instance! }, - nullable: true, - argumentsPropagateNullability: new[] { false, true }, - returnType) - : null; + { + if (member.DeclaringType != typeof(DateOnly)) + { + return null; + } + + return member.Name switch + { + nameof(DateOnly.Year) => Function(instance, returnType, "year"), + nameof(DateOnly.Month) => Function(instance, returnType, "month"), + nameof(DateOnly.DayOfYear) => Function(instance, returnType, "dayofyear"), + nameof(DateOnly.Day) => Function(instance, returnType, "day"), + _ => null + }; + } + + private SqlExpression Function(SqlExpression? instance, Type returnType, string datePart) + => _sqlExpressionFactory.Function( + "DATEPART", + [_sqlExpressionFactory.Fragment(datePart), instance!], + nullable: true, + argumentsPropagateNullability: [false, true], + returnType); }