From 6d977dba038c59d87e6370e9dd6acf533c680439 Mon Sep 17 00:00:00 2001 From: Lyra1337 Date: Fri, 3 May 2024 16:08:13 +0200 Subject: [PATCH 1/2] added translatons for TimeStamp.Total* members --- .../Internal/MySqlMemberTranslatorProvider.cs | 7 +- .../Internal/MySqlTimeSpanMemberTranslator.cs | 68 +++++++--- .../Tests/Models/ExpressionTest.cs | 128 ++++++++++++++---- 3 files changed, 158 insertions(+), 45 deletions(-) diff --git a/src/EFCore.MySql/Query/Internal/MySqlMemberTranslatorProvider.cs b/src/EFCore.MySql/Query/Internal/MySqlMemberTranslatorProvider.cs index 252151ccf..595298545 100644 --- a/src/EFCore.MySql/Query/Internal/MySqlMemberTranslatorProvider.cs +++ b/src/EFCore.MySql/Query/Internal/MySqlMemberTranslatorProvider.cs @@ -3,12 +3,15 @@ using JetBrains.Annotations; using Microsoft.EntityFrameworkCore.Query; +using Microsoft.EntityFrameworkCore.Storage; namespace Pomelo.EntityFrameworkCore.MySql.Query.Internal { public class MySqlMemberTranslatorProvider : RelationalMemberTranslatorProvider { - public MySqlMemberTranslatorProvider([NotNull] RelationalMemberTranslatorProviderDependencies dependencies) + public MySqlMemberTranslatorProvider( + [NotNull] RelationalMemberTranslatorProviderDependencies dependencies, + IRelationalTypeMappingSource typeMappingSource) : base(dependencies) { var sqlExpressionFactory = (MySqlSqlExpressionFactory)dependencies.SqlExpressionFactory; @@ -17,7 +20,7 @@ public MySqlMemberTranslatorProvider([NotNull] RelationalMemberTranslatorProvide new IMemberTranslator[] { new MySqlDateTimeMemberTranslator(sqlExpressionFactory), new MySqlStringMemberTranslator(sqlExpressionFactory), - new MySqlTimeSpanMemberTranslator(sqlExpressionFactory), + new MySqlTimeSpanMemberTranslator(sqlExpressionFactory, typeMappingSource), }); } } diff --git a/src/EFCore.MySql/Query/Internal/MySqlTimeSpanMemberTranslator.cs b/src/EFCore.MySql/Query/Internal/MySqlTimeSpanMemberTranslator.cs index b0020812f..f40c0e755 100644 --- a/src/EFCore.MySql/Query/Internal/MySqlTimeSpanMemberTranslator.cs +++ b/src/EFCore.MySql/Query/Internal/MySqlTimeSpanMemberTranslator.cs @@ -8,6 +8,7 @@ using Microsoft.EntityFrameworkCore.Diagnostics; using Microsoft.EntityFrameworkCore.Query; using Microsoft.EntityFrameworkCore.Query.SqlExpressions; +using Microsoft.EntityFrameworkCore.Storage; namespace Pomelo.EntityFrameworkCore.MySql.Query.Internal { @@ -21,11 +22,27 @@ public class MySqlTimeSpanMemberTranslator : IMemberTranslator { nameof(TimeSpan.Seconds), ("second", 1) }, { nameof(TimeSpan.Milliseconds), ("microsecond", 1000) }, }; + + private static readonly Dictionary _totalTimePartMapping + = new Dictionary + { + { nameof(TimeSpan.TotalDays), 24 * 60 * 60 }, + { nameof(TimeSpan.TotalHours), 60 * 60 }, + { nameof(TimeSpan.TotalMinutes), 60 }, + { nameof(TimeSpan.TotalSeconds), 1 }, + { nameof(TimeSpan.TotalMilliseconds), 0.001 }, + { nameof(TimeSpan.TotalNanoseconds), 0.001 * 0.001 * 0.001 }, + }; + private readonly MySqlSqlExpressionFactory _sqlExpressionFactory; + private readonly IRelationalTypeMappingSource _typeMappingSource; - public MySqlTimeSpanMemberTranslator(MySqlSqlExpressionFactory sqlExpressionFactory) + public MySqlTimeSpanMemberTranslator( + MySqlSqlExpressionFactory sqlExpressionFactory, + IRelationalTypeMappingSource typeMappingSource) { _sqlExpressionFactory = sqlExpressionFactory; + _typeMappingSource = typeMappingSource; } public virtual SqlExpression Translate( @@ -37,13 +54,14 @@ public MySqlTimeSpanMemberTranslator(MySqlSqlExpressionFactory sqlExpressionFact var declaringType = member.DeclaringType; var memberName = member.Name; - if (declaringType == typeof(TimeSpan) && - _datePartMapping.TryGetValue(memberName, out var datePart)) + if (declaringType == typeof(TimeSpan)) { - var extract = _sqlExpressionFactory.NullableFunction( - "EXTRACT", - new[] - { + if (_datePartMapping.TryGetValue(memberName, out var datePart)) + { + var extract = _sqlExpressionFactory.NullableFunction( + "EXTRACT", + new[] + { _sqlExpressionFactory.ComplexFunctionArgument( new [] { _sqlExpressionFactory.Fragment($"{datePart.Part} FROM"), @@ -51,18 +69,36 @@ public MySqlTimeSpanMemberTranslator(MySqlSqlExpressionFactory sqlExpressionFact }, " ", typeof(string)) - }, - returnType, - false); + }, + returnType, + false); - if (datePart.Divisor != 1) - { - return _sqlExpressionFactory.MySqlIntegerDivide( - extract, - _sqlExpressionFactory.Constant(datePart.Divisor)); + if (datePart.Divisor != 1) + { + return _sqlExpressionFactory.MySqlIntegerDivide( + extract, + _sqlExpressionFactory.Constant(datePart.Divisor)); + } + + return extract; } + else if (_totalTimePartMapping.TryGetValue(memberName, out var multiplicator) == true) + { + var convertToSecondsExpression = _sqlExpressionFactory.NullableFunction( + name: "TIME_TO_SEC", + arguments: new[] { instance }, + returnType: typeof(int), + typeMapping: _typeMappingSource.FindMapping(typeof(int)) + ); - return extract; + var divideExpression = _sqlExpressionFactory.Divide( + left: convertToSecondsExpression, + right: _sqlExpressionFactory.Constant(multiplicator), + typeMapping: _typeMappingSource.FindMapping(typeof(double)) + ); + + return divideExpression; + } } return null; diff --git a/test/EFCore.MySql.IntegrationTests/Tests/Models/ExpressionTest.cs b/test/EFCore.MySql.IntegrationTests/Tests/Models/ExpressionTest.cs index 0393977ac..2a6ce5c65 100644 --- a/test/EFCore.MySql.IntegrationTests/Tests/Models/ExpressionTest.cs +++ b/test/EFCore.MySql.IntegrationTests/Tests/Models/ExpressionTest.cs @@ -66,7 +66,8 @@ public void Dispose() public async Task MySqlContainsOptimizedTranslator() { var result = await _db.DataTypesVariable.Select(m => - new { + new + { m.Id, Contains = m.TypeString.Contains("Fram"), NotContains = m.TypeString.Contains("asdf") @@ -80,7 +81,8 @@ public async Task MySqlContainsOptimizedTranslator() public async Task MySqlDateAddTranslator() { var result = await _db.DataTypesSimple.Select(m => - new { + new + { m.Id, FutureYear = m.TypeDateTime.AddYears(1), FutureMonth = m.TypeDateTime.AddMonths(1), @@ -122,7 +124,8 @@ public async Task MySqlDateAddTranslator() public async Task MySqlDatePartTranslator() { var result = await _db.DataTypesSimple.Select(m => - new { + new + { m.Id, m.TypeDateTime.Year, m.TypeDateTime.Month, @@ -154,7 +157,8 @@ public async Task MySqlDateTimeNowTranslator() #pragma warning restore EF1002 var result = await _db.DataTypesSimple.Select(m => - new { + new + { m.Id, DateTime.Now, DateTime.UtcNow @@ -170,7 +174,8 @@ public async Task MySqlDateTimeNowTranslator() public async Task MySqlEndsWithOptimizedTranslator() { var result = await _db.DataTypesVariable.Select(m => - new { + new + { m.Id, EndsWith = m.TypeString.EndsWith("Framework"), NotEndsWith = m.TypeString.EndsWith("Entity") @@ -184,7 +189,8 @@ public async Task MySqlEndsWithOptimizedTranslator() public async Task MySqlMathAbsTranslator() { var result = await _db.DataTypesSimple.Select(m => - new { + new + { m.Id, Abs = Math.Abs(m.TypeDoubleN.Value), }).FirstOrDefaultAsync(m => m.Id == _simple.Id); @@ -196,7 +202,8 @@ public async Task MySqlMathAbsTranslator() public async Task MySqlMathCeilingTranslator() { var result = await _db.DataTypesSimple.Select(m => - new { + new + { m.Id, Ceiling = Math.Ceiling(m.TypeDouble), }).FirstOrDefaultAsync(m => m.Id == _simple.Id); @@ -208,7 +215,8 @@ public async Task MySqlMathCeilingTranslator() public async Task MySqlMathFloorTranslator() { var result = await _db.DataTypesSimple.Select(m => - new { + new + { m.Id, Floor = Math.Floor(m.TypeDouble), }).FirstOrDefaultAsync(m => m.Id == _simple.Id); @@ -220,7 +228,8 @@ public async Task MySqlMathFloorTranslator() public async Task MySqlMathPowerTranslator() { var result = await _db.DataTypesSimple.Select(m => - new { + new + { m.Id, Pow = Math.Pow(m.TypeDouble, m.TypeDouble), }).FirstOrDefaultAsync(m => m.Id == _simple.Id); @@ -232,7 +241,8 @@ public async Task MySqlMathPowerTranslator() public async Task MySqlMathRoundTranslator() { var result = await _db.DataTypesSimple.Select(m => - new { + new + { m.Id, Round = Math.Round(m.TypeDouble), }).FirstOrDefaultAsync(m => m.Id == _simple.Id); @@ -244,7 +254,8 @@ public async Task MySqlMathRoundTranslator() public async Task MySqlMathTruncateTranslator() { var result = await _db.DataTypesSimple.Select(m => - new { + new + { m.Id, Truncate = Math.Truncate(m.TypeDouble), }).FirstOrDefaultAsync(m => m.Id == _simple.Id); @@ -256,7 +267,8 @@ public async Task MySqlMathTruncateTranslator() public async Task MySqlNewGuidTranslator() { var result = await _db.DataTypesSimple.Select(m => - new { + new + { m.Id, Guid = Guid.NewGuid(), }).FirstOrDefaultAsync(m => m.Id == _simple.Id); @@ -268,7 +280,8 @@ public async Task MySqlNewGuidTranslator() public async Task MySqlRegexIsMatchTranslator() { var result = await _db.DataTypesVariable.Select(m => - new { + new + { m.Id, Match = Regex.IsMatch(m.TypeString, @"^Entity[a-zA-Z]{9}$"), NotMatch = Regex.IsMatch(m.TypeString, @"^Entity[a-zA-Z]{8}$") @@ -282,7 +295,8 @@ public async Task MySqlRegexIsMatchTranslator() public async Task MySqlStringEqualsTranslator() { var result = await _db.DataTypesVariable.Select(m => - new { + new + { m.Id, StringEquals = m.TypeString.Equals("EntityFramework"), StringNotEquals = m.TypeString.Equals("asdf") @@ -296,7 +310,8 @@ public async Task MySqlStringEqualsTranslator() public async Task MySqlStartsWithOptimizedTranslator() { var result = await _db.DataTypesVariable.Select(m => - new { + new + { m.Id, StartsWith = m.TypeString.StartsWith("Entity"), NotStartsWith = m.TypeString.StartsWith("Framework") @@ -310,7 +325,8 @@ public async Task MySqlStartsWithOptimizedTranslator() public async Task MySqlStringLengthTranslator() { var result = await _db.DataTypesVariable.Select(m => - new { + new + { m.Id, m.TypeString.Length, }).FirstOrDefaultAsync(m => m.Id == _variable.Id); @@ -321,7 +337,8 @@ public async Task MySqlStringLengthTranslator() public async Task MySqlStringReplaceTranslator() { var result = await _db.DataTypesVariable.Select(m => - new { + new + { m.Id, Replaced = m.TypeString.Replace("Entity", "Pomelo.Entity") }).FirstOrDefaultAsync(m => m.Id == _variable.Id); @@ -333,7 +350,8 @@ public async Task MySqlStringReplaceTranslator() public async Task MySqlStringSubstringTranslator() { var result = await _db.DataTypesVariable.Select(m => - new { + new + { m.Id, First3Chars = m.TypeString.Substring(0, 3), Last3Chars = m.TypeString.Substring(m.TypeString.Length - 4, 3), @@ -349,7 +367,8 @@ public async Task MySqlStringSubstringTranslator() public async Task MySqlStringToLowerTranslator() { var result = await _db.DataTypesVariable.Select(m => - new { + new + { m.Id, Lower = m.TypeString.ToLower() }).FirstOrDefaultAsync(m => m.Id == _variable.Id); @@ -361,7 +380,8 @@ public async Task MySqlStringToLowerTranslator() public async Task MySqlStringToUpperTranslator() { var result = await _db.DataTypesVariable.Select(m => - new { + new + { m.Id, Upper = m.TypeString.ToUpper() }).FirstOrDefaultAsync(m => m.Id == _variable.Id); @@ -373,7 +393,8 @@ public async Task MySqlStringToUpperTranslator() public async Task MySqlMathAcosTranslator() { var result = await _db.DataTypesSimple.Select(m => - new { + new + { m.Id, Acos = Math.Acos(m.TypeDoubleN.Value), }).FirstOrDefaultAsync(m => m.Id == _simple2.Id); @@ -385,7 +406,8 @@ public async Task MySqlMathAcosTranslator() public async Task MySqlMathCosTranslator() { var result = await _db.DataTypesSimple.Select(m => - new { + new + { m.Id, Cos = Math.Cos(m.TypeDouble), }).FirstOrDefaultAsync(m => m.Id == _simple2.Id); @@ -397,7 +419,8 @@ public async Task MySqlMathCosTranslator() public async Task MySqlMathSinTranslator() { var result = await _db.DataTypesSimple.Select(m => - new { + new + { m.Id, Sin = Math.Sin(m.TypeDouble), }).FirstOrDefaultAsync(m => m.Id == _simple2.Id); @@ -415,7 +438,8 @@ public async Task MySqlDateToDateTimeConvertTranslator() [Fact] public async Task MySqlToStringConvertTranslator() { - var result = await _db.DataTypesSimple.Select(m => new { + var result = await _db.DataTypesSimple.Select(m => new + { ConvertedInt32 = m.Id.ToString(), ConvertedLong = m.TypeLong.ToString(), ConvertedByte = m.TypeByte.ToString(), @@ -436,9 +460,10 @@ public async Task MySqlToStringConvertTranslator() [Fact] public async Task MySqlCastTranslator() { - var result = await _db.DataTypesSimple.Select(m => new { - IntToUlong = (ulong) m.TypeInt, - IntToDecimal = (decimal) m.TypeInt, + var result = await _db.DataTypesSimple.Select(m => new + { + IntToUlong = (ulong)m.TypeInt, + IntToDecimal = (decimal)m.TypeInt, IntToString = "test" + m.TypeInt, } ).FirstOrDefaultAsync(); @@ -446,6 +471,55 @@ public async Task MySqlCastTranslator() Assert.NotNull(result); } + [Fact] + public async Task MySqlTimeStampTotalsTranslator() + { + var result = await _db.DataTypesSimple.Select(m => + new + { + m.Id, + m.TypeTimeSpan.TotalNanoseconds, + m.TypeTimeSpan.TotalMilliseconds, + m.TypeTimeSpan.TotalSeconds, + m.TypeTimeSpan.TotalMinutes, + m.TypeTimeSpan.TotalHours, + m.TypeTimeSpan.TotalDays, + }).FirstOrDefaultAsync(m => m.Id == _simple.Id); + + Assert.Equal(_simple.TypeTimeSpan.TotalNanoseconds, result.TotalNanoseconds); + Assert.Equal(_simple.TypeTimeSpan.TotalMilliseconds, result.TotalMilliseconds); + Assert.Equal(_simple.TypeTimeSpan.TotalSeconds, result.TotalSeconds); + Assert.Equal(_simple.TypeTimeSpan.TotalMinutes, result.TotalMinutes); + Assert.Equal(_simple.TypeTimeSpan.TotalHours, result.TotalHours); + Assert.Equal(_simple.TypeTimeSpan.TotalDays, result.TotalDays); + } + + [Fact] + public async Task MySqlTimeStampTotalsCalculationTranslator() + { + var custom = new TimeSpan(1, 2, 3, 4); + + var result = await _db.DataTypesSimple + .Select(x => custom) + .Select(c => + new + { + c.TotalNanoseconds, + c.TotalMilliseconds, + c.TotalSeconds, + c.TotalMinutes, + c.TotalHours, + c.TotalDays, + }).FirstOrDefaultAsync(); + + Assert.Equal(custom.TotalNanoseconds, result.TotalNanoseconds); + Assert.Equal(custom.TotalMilliseconds, result.TotalMilliseconds); + Assert.Equal(custom.TotalSeconds, result.TotalSeconds); + Assert.Equal(custom.TotalMinutes, result.TotalMinutes, tolerance: 0.00001); + Assert.Equal(custom.TotalHours, result.TotalHours, tolerance: 0.00001); + Assert.Equal(custom.TotalDays, result.TotalDays, tolerance: 0.00001); + } + } } From 8b670118ba098105d869a89fa78bade9f81d1215 Mon Sep 17 00:00:00 2001 From: Lyra1337 Date: Fri, 3 May 2024 16:18:43 +0200 Subject: [PATCH 2/2] fixed code style --- .../Tests/Models/ExpressionTest.cs | 81 +++++++------------ 1 file changed, 27 insertions(+), 54 deletions(-) diff --git a/test/EFCore.MySql.IntegrationTests/Tests/Models/ExpressionTest.cs b/test/EFCore.MySql.IntegrationTests/Tests/Models/ExpressionTest.cs index 2a6ce5c65..c9a9186d3 100644 --- a/test/EFCore.MySql.IntegrationTests/Tests/Models/ExpressionTest.cs +++ b/test/EFCore.MySql.IntegrationTests/Tests/Models/ExpressionTest.cs @@ -66,8 +66,7 @@ public void Dispose() public async Task MySqlContainsOptimizedTranslator() { var result = await _db.DataTypesVariable.Select(m => - new - { + new { m.Id, Contains = m.TypeString.Contains("Fram"), NotContains = m.TypeString.Contains("asdf") @@ -81,8 +80,7 @@ public async Task MySqlContainsOptimizedTranslator() public async Task MySqlDateAddTranslator() { var result = await _db.DataTypesSimple.Select(m => - new - { + new { m.Id, FutureYear = m.TypeDateTime.AddYears(1), FutureMonth = m.TypeDateTime.AddMonths(1), @@ -124,8 +122,7 @@ public async Task MySqlDateAddTranslator() public async Task MySqlDatePartTranslator() { var result = await _db.DataTypesSimple.Select(m => - new - { + new { m.Id, m.TypeDateTime.Year, m.TypeDateTime.Month, @@ -157,8 +154,7 @@ public async Task MySqlDateTimeNowTranslator() #pragma warning restore EF1002 var result = await _db.DataTypesSimple.Select(m => - new - { + new { m.Id, DateTime.Now, DateTime.UtcNow @@ -174,8 +170,7 @@ public async Task MySqlDateTimeNowTranslator() public async Task MySqlEndsWithOptimizedTranslator() { var result = await _db.DataTypesVariable.Select(m => - new - { + new { m.Id, EndsWith = m.TypeString.EndsWith("Framework"), NotEndsWith = m.TypeString.EndsWith("Entity") @@ -189,8 +184,7 @@ public async Task MySqlEndsWithOptimizedTranslator() public async Task MySqlMathAbsTranslator() { var result = await _db.DataTypesSimple.Select(m => - new - { + new { m.Id, Abs = Math.Abs(m.TypeDoubleN.Value), }).FirstOrDefaultAsync(m => m.Id == _simple.Id); @@ -202,8 +196,7 @@ public async Task MySqlMathAbsTranslator() public async Task MySqlMathCeilingTranslator() { var result = await _db.DataTypesSimple.Select(m => - new - { + new { m.Id, Ceiling = Math.Ceiling(m.TypeDouble), }).FirstOrDefaultAsync(m => m.Id == _simple.Id); @@ -215,8 +208,7 @@ public async Task MySqlMathCeilingTranslator() public async Task MySqlMathFloorTranslator() { var result = await _db.DataTypesSimple.Select(m => - new - { + new { m.Id, Floor = Math.Floor(m.TypeDouble), }).FirstOrDefaultAsync(m => m.Id == _simple.Id); @@ -228,8 +220,7 @@ public async Task MySqlMathFloorTranslator() public async Task MySqlMathPowerTranslator() { var result = await _db.DataTypesSimple.Select(m => - new - { + new { m.Id, Pow = Math.Pow(m.TypeDouble, m.TypeDouble), }).FirstOrDefaultAsync(m => m.Id == _simple.Id); @@ -241,8 +232,7 @@ public async Task MySqlMathPowerTranslator() public async Task MySqlMathRoundTranslator() { var result = await _db.DataTypesSimple.Select(m => - new - { + new { m.Id, Round = Math.Round(m.TypeDouble), }).FirstOrDefaultAsync(m => m.Id == _simple.Id); @@ -254,8 +244,7 @@ public async Task MySqlMathRoundTranslator() public async Task MySqlMathTruncateTranslator() { var result = await _db.DataTypesSimple.Select(m => - new - { + new { m.Id, Truncate = Math.Truncate(m.TypeDouble), }).FirstOrDefaultAsync(m => m.Id == _simple.Id); @@ -267,8 +256,7 @@ public async Task MySqlMathTruncateTranslator() public async Task MySqlNewGuidTranslator() { var result = await _db.DataTypesSimple.Select(m => - new - { + new { m.Id, Guid = Guid.NewGuid(), }).FirstOrDefaultAsync(m => m.Id == _simple.Id); @@ -280,8 +268,7 @@ public async Task MySqlNewGuidTranslator() public async Task MySqlRegexIsMatchTranslator() { var result = await _db.DataTypesVariable.Select(m => - new - { + new { m.Id, Match = Regex.IsMatch(m.TypeString, @"^Entity[a-zA-Z]{9}$"), NotMatch = Regex.IsMatch(m.TypeString, @"^Entity[a-zA-Z]{8}$") @@ -295,8 +282,7 @@ public async Task MySqlRegexIsMatchTranslator() public async Task MySqlStringEqualsTranslator() { var result = await _db.DataTypesVariable.Select(m => - new - { + new { m.Id, StringEquals = m.TypeString.Equals("EntityFramework"), StringNotEquals = m.TypeString.Equals("asdf") @@ -310,8 +296,7 @@ public async Task MySqlStringEqualsTranslator() public async Task MySqlStartsWithOptimizedTranslator() { var result = await _db.DataTypesVariable.Select(m => - new - { + new { m.Id, StartsWith = m.TypeString.StartsWith("Entity"), NotStartsWith = m.TypeString.StartsWith("Framework") @@ -325,8 +310,7 @@ public async Task MySqlStartsWithOptimizedTranslator() public async Task MySqlStringLengthTranslator() { var result = await _db.DataTypesVariable.Select(m => - new - { + new { m.Id, m.TypeString.Length, }).FirstOrDefaultAsync(m => m.Id == _variable.Id); @@ -337,8 +321,7 @@ public async Task MySqlStringLengthTranslator() public async Task MySqlStringReplaceTranslator() { var result = await _db.DataTypesVariable.Select(m => - new - { + new { m.Id, Replaced = m.TypeString.Replace("Entity", "Pomelo.Entity") }).FirstOrDefaultAsync(m => m.Id == _variable.Id); @@ -350,8 +333,7 @@ public async Task MySqlStringReplaceTranslator() public async Task MySqlStringSubstringTranslator() { var result = await _db.DataTypesVariable.Select(m => - new - { + new { m.Id, First3Chars = m.TypeString.Substring(0, 3), Last3Chars = m.TypeString.Substring(m.TypeString.Length - 4, 3), @@ -367,8 +349,7 @@ public async Task MySqlStringSubstringTranslator() public async Task MySqlStringToLowerTranslator() { var result = await _db.DataTypesVariable.Select(m => - new - { + new { m.Id, Lower = m.TypeString.ToLower() }).FirstOrDefaultAsync(m => m.Id == _variable.Id); @@ -380,8 +361,7 @@ public async Task MySqlStringToLowerTranslator() public async Task MySqlStringToUpperTranslator() { var result = await _db.DataTypesVariable.Select(m => - new - { + new { m.Id, Upper = m.TypeString.ToUpper() }).FirstOrDefaultAsync(m => m.Id == _variable.Id); @@ -393,8 +373,7 @@ public async Task MySqlStringToUpperTranslator() public async Task MySqlMathAcosTranslator() { var result = await _db.DataTypesSimple.Select(m => - new - { + new { m.Id, Acos = Math.Acos(m.TypeDoubleN.Value), }).FirstOrDefaultAsync(m => m.Id == _simple2.Id); @@ -406,8 +385,7 @@ public async Task MySqlMathAcosTranslator() public async Task MySqlMathCosTranslator() { var result = await _db.DataTypesSimple.Select(m => - new - { + new { m.Id, Cos = Math.Cos(m.TypeDouble), }).FirstOrDefaultAsync(m => m.Id == _simple2.Id); @@ -419,8 +397,7 @@ public async Task MySqlMathCosTranslator() public async Task MySqlMathSinTranslator() { var result = await _db.DataTypesSimple.Select(m => - new - { + new { m.Id, Sin = Math.Sin(m.TypeDouble), }).FirstOrDefaultAsync(m => m.Id == _simple2.Id); @@ -438,8 +415,7 @@ public async Task MySqlDateToDateTimeConvertTranslator() [Fact] public async Task MySqlToStringConvertTranslator() { - var result = await _db.DataTypesSimple.Select(m => new - { + var result = await _db.DataTypesSimple.Select(m => new { ConvertedInt32 = m.Id.ToString(), ConvertedLong = m.TypeLong.ToString(), ConvertedByte = m.TypeByte.ToString(), @@ -460,8 +436,7 @@ public async Task MySqlToStringConvertTranslator() [Fact] public async Task MySqlCastTranslator() { - var result = await _db.DataTypesSimple.Select(m => new - { + var result = await _db.DataTypesSimple.Select(m => new { IntToUlong = (ulong)m.TypeInt, IntToDecimal = (decimal)m.TypeInt, IntToString = "test" + m.TypeInt, @@ -475,8 +450,7 @@ public async Task MySqlCastTranslator() public async Task MySqlTimeStampTotalsTranslator() { var result = await _db.DataTypesSimple.Select(m => - new - { + new { m.Id, m.TypeTimeSpan.TotalNanoseconds, m.TypeTimeSpan.TotalMilliseconds, @@ -502,8 +476,7 @@ public async Task MySqlTimeStampTotalsCalculationTranslator() var result = await _db.DataTypesSimple .Select(x => custom) .Select(c => - new - { + new { c.TotalNanoseconds, c.TotalMilliseconds, c.TotalSeconds,