diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 45387a4..2dbe83e 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -9,6 +9,7 @@ jobs: env: Prerelease: ci + CONFIGURATION: ReleaseForGithubActions steps: - name: Print GITHUB_RUN_NUMBER @@ -28,29 +29,30 @@ jobs: - name: Build Projects run: | - dotnet build ./src/LinqKit.Core/LinqKit.Core.csproj -c ReleaseForGithubActions - dotnet build ./src/LinqKit/LinqKit.csproj -c ReleaseForGithubActions - dotnet build ./src/LinqKit.EntityFramework/LinqKit.EntityFramework.csproj -c ReleaseForGithubActions - dotnet build ./src/LinqKit.Microsoft.EntityFrameworkCore/LinqKit.Microsoft.EntityFrameworkCore.csproj -c ReleaseForGithubActions - dotnet build ./src/LinqKit.Microsoft.EntityFrameworkCore2/LinqKit.Microsoft.EntityFrameworkCore2.csproj -c ReleaseForGithubActions - dotnet build ./src/LinqKit.Microsoft.EntityFrameworkCore3/LinqKit.Microsoft.EntityFrameworkCore3.csproj -c ReleaseForGithubActions - dotnet build ./src/LinqKit.Microsoft.EntityFrameworkCore31/LinqKit.Microsoft.EntityFrameworkCore31.csproj -c ReleaseForGithubActions - dotnet build ./src/LinqKit.Microsoft.EntityFrameworkCore5/LinqKit.Microsoft.EntityFrameworkCore5.csproj -c ReleaseForGithubActions - dotnet build ./src/LinqKit.Microsoft.EntityFrameworkCore6/LinqKit.Microsoft.EntityFrameworkCore6.csproj -c ReleaseForGithubActions - dotnet build ./src/LinqKit.Microsoft.EntityFrameworkCore7/LinqKit.Microsoft.EntityFrameworkCore7.csproj -c ReleaseForGithubActions - dotnet build ./src/LinqKit.Microsoft.EntityFrameworkCore8/LinqKit.Microsoft.EntityFrameworkCore8.csproj -c ReleaseForGithubActions - dotnet build ./src/LinqKit.Microsoft.EntityFrameworkCore9/LinqKit.Microsoft.EntityFrameworkCore9.csproj -c ReleaseForGithubActions - dotnet build ./src/LinqKit.Microsoft.EntityFrameworkCore10/LinqKit.Microsoft.EntityFrameworkCore10.csproj -c ReleaseForGithubActions - dotnet build ./src/LinqKit.Z.EntityFramework.Classic/LinqKit.Z.EntityFramework.Classic.csproj -c ReleaseForGithubActions + dotnet build ./src/LinqKit.Core/LinqKit.Core.csproj -c $env:CONFIGURATION + dotnet build ./src/LinqKit/LinqKit.csproj -c $env:CONFIGURATION + dotnet build ./src/LinqKit.EntityFramework/LinqKit.EntityFramework.csproj -c $env:CONFIGURATION + dotnet build ./src/LinqKit.Microsoft.EntityFrameworkCore/LinqKit.Microsoft.EntityFrameworkCore.csproj -c $env:CONFIGURATION + dotnet build ./src/LinqKit.Microsoft.EntityFrameworkCore2/LinqKit.Microsoft.EntityFrameworkCore2.csproj -c $env:CONFIGURATION + dotnet build ./src/LinqKit.Microsoft.EntityFrameworkCore3/LinqKit.Microsoft.EntityFrameworkCore3.csproj -c $env:CONFIGURATION + dotnet build ./src/LinqKit.Microsoft.EntityFrameworkCore31/LinqKit.Microsoft.EntityFrameworkCore31.csproj -c $env:CONFIGURATION + dotnet build ./src/LinqKit.Microsoft.EntityFrameworkCore5/LinqKit.Microsoft.EntityFrameworkCore5.csproj -c $env:CONFIGURATION + dotnet build ./src/LinqKit.Microsoft.EntityFrameworkCore6/LinqKit.Microsoft.EntityFrameworkCore6.csproj -c $env:CONFIGURATION + dotnet build ./src/LinqKit.Microsoft.EntityFrameworkCore7/LinqKit.Microsoft.EntityFrameworkCore7.csproj -c $env:CONFIGURATION + dotnet build ./src/LinqKit.Microsoft.EntityFrameworkCore8/LinqKit.Microsoft.EntityFrameworkCore8.csproj -c $env:CONFIGURATION + dotnet build ./src/LinqKit.Microsoft.EntityFrameworkCore9/LinqKit.Microsoft.EntityFrameworkCore9.csproj -c $env:CONFIGURATION + dotnet build ./src/LinqKit.Microsoft.EntityFrameworkCore10/LinqKit.Microsoft.EntityFrameworkCore10.csproj -c $env:CONFIGURATION + dotnet build ./src/LinqKit.Z.EntityFramework.Classic/LinqKit.Z.EntityFramework.Classic.csproj -c $env:CONFIGURATION - name: Run Tests run: | - dotnet test ./tests/LinqKit.Tests/LinqKit.Tests.csproj -c ReleaseForGithubActions - dotnet test ./tests/LinqKit.EntityFramework.Tests.Net452/LinqKit.EntityFramework.Tests.Net452.csproj -c ReleaseForGithubActions - dotnet test ./tests/LinqKit.Microsoft.EntityFrameworkCore31.Tests -c ReleaseForGithubActions - dotnet test ./tests/LinqKit.Microsoft.EntityFrameworkCore5.Tests -c ReleaseForGithubActions - dotnet test ./tests/LinqKit.Microsoft.EntityFrameworkCore6.Tests -c ReleaseForGithubActions - dotnet test ./tests/LinqKit.Microsoft.EntityFrameworkCore7.Tests -c ReleaseForGithubActions - dotnet test ./tests/LinqKit.Microsoft.EntityFrameworkCore8.Tests -c ReleaseForGithubActions - dotnet test ./tests/LinqKit.Microsoft.EntityFrameworkCore9.Tests -c ReleaseForGithubActions - dotnet test ./tests/LinqKit.Microsoft.EntityFrameworkCore10.Tests -c ReleaseForGithubActions \ No newline at end of file + dotnet test ./tests/LinqKit.Core.Tests/LinqKit.Core.Tests.csproj -c $env:CONFIGURATION + dotnet test ./tests/LinqKit.Tests/LinqKit.Tests.csproj -c $env:CONFIGURATION + dotnet test ./tests/LinqKit.EntityFramework.Tests.Net452/LinqKit.EntityFramework.Tests.Net452.csproj -c $env:CONFIGURATION + dotnet test ./tests/LinqKit.Microsoft.EntityFrameworkCore31.Tests -c $env:CONFIGURATION + dotnet test ./tests/LinqKit.Microsoft.EntityFrameworkCore5.Tests -c $env:CONFIGURATION + dotnet test ./tests/LinqKit.Microsoft.EntityFrameworkCore6.Tests -c $env:CONFIGURATION + dotnet test ./tests/LinqKit.Microsoft.EntityFrameworkCore7.Tests -c $env:CONFIGURATION + dotnet test ./tests/LinqKit.Microsoft.EntityFrameworkCore8.Tests -c $env:CONFIGURATION + dotnet test ./tests/LinqKit.Microsoft.EntityFrameworkCore9.Tests -c $env:CONFIGURATION + dotnet test ./tests/LinqKit.Microsoft.EntityFrameworkCore10.Tests -c $env:CONFIGURATION \ No newline at end of file diff --git a/LinqKit Solution.sln b/LinqKit Solution.sln index 265f004..fec54b8 100644 --- a/LinqKit Solution.sln +++ b/LinqKit Solution.sln @@ -1,15 +1,17 @@  Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 18 -VisualStudioVersion = 18.0.11201.2 d18.0 +VisualStudioVersion = 18.0.11201.2 MinimumVisualStudioVersion = 10.0.40219.1 Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{2F7F283D-5576-417F-A467-EC210226AC3B}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{9FC09568-C879-47D8-9D28-E736B8A84C95}" ProjectSection(SolutionItems) = preProject + .github\workflows\CreateRelease.yml = .github\workflows\CreateRelease.yml Directory.Build.props = Directory.Build.props Generate ReleaseNotes.bat = Generate ReleaseNotes.bat LICENSE = LICENSE + .github\workflows\main.yml = .github\workflows\main.yml NuGet.txt = NuGet.txt PackageReleaseNotes.template = PackageReleaseNotes.template PackageReleaseNotes.txt = PackageReleaseNotes.txt @@ -117,6 +119,14 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LinqKit.Microsoft.EntityFra EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LinqKit.Microsoft.EntityFrameworkCore10.Tests", "tests\LinqKit.Microsoft.EntityFrameworkCore10.Tests\LinqKit.Microsoft.EntityFrameworkCore10.Tests.csproj", "{6700F0EC-ABC9-6321-9501-6F87C2B62AAD}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LinqKit.Core.Tests", "tests\LinqKit.Core.Tests\LinqKit.Core.Tests.csproj", "{D6F5850C-F40D-2A48-578B-7B3F15C31F71}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "GitHub Actions", "GitHub Actions", "{2A7B6550-F4EA-4ACE-B659-F262C2FF860E}" + ProjectSection(SolutionItems) = preProject + .github\workflows\CreateRelease.yml = .github\workflows\CreateRelease.yml + .github\workflows\main.yml = .github\workflows\main.yml + EndProjectSection +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -740,6 +750,22 @@ Global {6700F0EC-ABC9-6321-9501-6F87C2B62AAD}.Release|x64.Build.0 = Release|Any CPU {6700F0EC-ABC9-6321-9501-6F87C2B62AAD}.Release|x86.ActiveCfg = Release|Any CPU {6700F0EC-ABC9-6321-9501-6F87C2B62AAD}.Release|x86.Build.0 = Release|Any CPU + {D6F5850C-F40D-2A48-578B-7B3F15C31F71}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {D6F5850C-F40D-2A48-578B-7B3F15C31F71}.Debug|Any CPU.Build.0 = Debug|Any CPU + {D6F5850C-F40D-2A48-578B-7B3F15C31F71}.Debug|ARM.ActiveCfg = Debug|Any CPU + {D6F5850C-F40D-2A48-578B-7B3F15C31F71}.Debug|ARM.Build.0 = Debug|Any CPU + {D6F5850C-F40D-2A48-578B-7B3F15C31F71}.Debug|x64.ActiveCfg = Debug|Any CPU + {D6F5850C-F40D-2A48-578B-7B3F15C31F71}.Debug|x64.Build.0 = Debug|Any CPU + {D6F5850C-F40D-2A48-578B-7B3F15C31F71}.Debug|x86.ActiveCfg = Debug|Any CPU + {D6F5850C-F40D-2A48-578B-7B3F15C31F71}.Debug|x86.Build.0 = Debug|Any CPU + {D6F5850C-F40D-2A48-578B-7B3F15C31F71}.Release|Any CPU.ActiveCfg = Release|Any CPU + {D6F5850C-F40D-2A48-578B-7B3F15C31F71}.Release|Any CPU.Build.0 = Release|Any CPU + {D6F5850C-F40D-2A48-578B-7B3F15C31F71}.Release|ARM.ActiveCfg = Release|Any CPU + {D6F5850C-F40D-2A48-578B-7B3F15C31F71}.Release|ARM.Build.0 = Release|Any CPU + {D6F5850C-F40D-2A48-578B-7B3F15C31F71}.Release|x64.ActiveCfg = Release|Any CPU + {D6F5850C-F40D-2A48-578B-7B3F15C31F71}.Release|x64.Build.0 = Release|Any CPU + {D6F5850C-F40D-2A48-578B-7B3F15C31F71}.Release|x86.ActiveCfg = Release|Any CPU + {D6F5850C-F40D-2A48-578B-7B3F15C31F71}.Release|x86.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -785,6 +811,8 @@ Global {8ADDBFF3-FCCB-4E16-939F-10E96ECE0C24} = {0BE21A11-8EF0-404B-AFC0-533A62386C4C} {6924F4DD-E516-33CB-1443-0640759F3C73} = {2F7F283D-5576-417F-A467-EC210226AC3B} {6700F0EC-ABC9-6321-9501-6F87C2B62AAD} = {0BE21A11-8EF0-404B-AFC0-533A62386C4C} + {D6F5850C-F40D-2A48-578B-7B3F15C31F71} = {0BE21A11-8EF0-404B-AFC0-533A62386C4C} + {2A7B6550-F4EA-4ACE-B659-F262C2FF860E} = {9FC09568-C879-47D8-9D28-E736B8A84C95} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {8F6283C5-9029-434E-BD90-E95FB377DA9B} diff --git a/appveyor.yml b/appveyor.yml index 1fe0456..8e0174c 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -13,21 +13,29 @@ init: environment: PATH: $(PATH);$(PROGRAMFILES)\dotnet\ +install: +- ps: | + $ErrorActionPreference = 'Stop' + $dotnetVersion = '10.0.100' + Write-Host "Installing .NET SDK $dotnetVersion..." + iex "& { $(irm https://dot.net/v1/dotnet-install.ps1) } -Version $dotnetVersion -InstallDir '$Env:ProgramFiles\dotnet'" + build_script: - dotnet build .\src\LinqKit\LinqKit.csproj -c %CONFIGURATION% +- dotnet build .\src\LinqKit.Core\LinqKit.Core.csproj -c %CONFIGURATION% - dotnet build .\src\LinqKit.EntityFramework\LinqKit.EntityFramework.csproj -c %CONFIGURATION% - dotnet build .\src\LinqKit.Microsoft.EntityFrameworkCore\LinqKit.Microsoft.EntityFrameworkCore.csproj -c %CONFIGURATION% - dotnet build .\src\LinqKit.Z.EntityFramework.Classic\LinqKit.Z.EntityFramework.Classic.csproj -c %CONFIGURATION% -- dotnet build .\tests\LinqKit.Tests\LinqKit.Tests.csproj -- dotnet build .\tests\LinqKit.EntityFramework.Tests.Net452\LinqKit.EntityFramework.Tests.Net452.csproj -- dotnet build .\tests\LinqKit.Microsoft.EntityFrameworkCore.Tests\LinqKit.Microsoft.EntityFrameworkCore.Tests.csproj -c %CONFIGURATION% test_script: -- dotnet test --no-build .\tests\LinqKit.Tests\LinqKit.Tests.csproj -- dotnet test --no-build .\tests\LinqKit.EntityFramework.Tests.Net452\LinqKit.EntityFramework.Tests.Net452.csproj -- dotnet test --no-build .\tests\LinqKit.Microsoft.EntityFrameworkCore.Tests -c %CONFIGURATION% +- dotnet test .\tests\LinqKit.Tests\LinqKit.Tests.csproj +- dotnet test .\tests\LinqKit.Core.Tests\LinqKit.Core.Tests.csproj -c %CONFIGURATION% +- dotnet test .\tests\LinqKit.EntityFramework.Tests.Net452\LinqKit.EntityFramework.Tests.Net452.csproj +- dotnet test .\tests\LinqKit.Microsoft.EntityFrameworkCore8.Tests -c %CONFIGURATION% +- dotnet test .\tests\LinqKit.Microsoft.EntityFrameworkCore9.Tests -c %CONFIGURATION% +- dotnet test .\tests\LinqKit.Microsoft.EntityFrameworkCore10.Tests -c %CONFIGURATION% #artifacts: diff --git a/src/LinqKit.Core/ExpressionStarter.cs b/src/LinqKit.Core/ExpressionStarter.cs index 96ac5b5..b3fe34c 100644 --- a/src/LinqKit.Core/ExpressionStarter.cs +++ b/src/LinqKit.Core/ExpressionStarter.cs @@ -165,7 +165,7 @@ public static implicit operator ExpressionStarter(Expression> r public bool TailCall => Predicate.TailCall; #endif -#if !(NET35 || WINDOWS_APP || NETSTANDARD || PORTABLE || PORTABLE40 || UAP || EFCORE6 || EFCORE7) +#if !(NET35 || WINDOWS_APP || NETSTANDARD || PORTABLE || PORTABLE40 || UAP || EFCORE6 || EFCORE7 || NET10_0_OR_GREATER) /// [Pure] public void CompileToMethod(MethodBuilder method) { Predicate.CompileToMethod(method); } diff --git a/src/LinqKit.Core/Extensions.cs b/src/LinqKit.Core/Extensions.cs index 3d808da..c25c402 100644 --- a/src/LinqKit.Core/Extensions.cs +++ b/src/LinqKit.Core/Extensions.cs @@ -85,228 +85,4 @@ static ExpandableQueryFactory() } #endif } -} - -#if NOEF -namespace LinqKit -{ - /// - /// Refer to http://www.albahari.com/nutshell/linqkit.html and http://tomasp.net/blog/linq-expand.aspx for more information. - /// - public static class ExtensionsCore - { - /// LinqKit: Expands expression - [Pure] - public static Expression Expand(this Expression expr) - { - return (Expression)new ExpressionExpander().Visit(expr); - } - - /// LinqKit: Expands expression - [Pure] - public static Expression Expand(this ExpressionStarter expr) - { - return expr != null && (expr.IsStarted || expr.UseDefaultExpression) ? new ExpressionExpander().Visit(expr) : null; - } - - /// LinqKit: Expands expression - [Pure] - public static Expression Expand(this Expression expr) - { - return new ExpressionExpander().Visit(expr); - } - - /// LinqKit: Compile and invoke - [Pure] - public static TResult Invoke(this Expression> expr) - { - return expr.Compile().Invoke(); - } - - /// LinqKit: Compile and invoke - [Pure] - public static TResult Invoke(this Expression> expr, T1 arg1) - { - return expr.Compile().Invoke(arg1); - } - - /// LinqKit: Compile and invoke - [Pure] - public static TResult Invoke(this Expression> expr, T1 arg1, T2 arg2) - { - return expr.Compile().Invoke(arg1, arg2); - } - - /// LinqKit: Compile and invoke - [Pure] - public static TResult Invoke( - this Expression> expr, T1 arg1, T2 arg2, T3 arg3) - { - return expr.Compile().Invoke(arg1, arg2, arg3); - } - - /// LinqKit: Compile and invoke - [Pure] - public static TResult Invoke( - this Expression> expr, T1 arg1, T2 arg2, T3 arg3, T4 arg4) - { - return expr.Compile().Invoke(arg1, arg2, arg3, arg4); - } - - /// - /// Performs the specified action on each element of the IEnumerable<T>. - /// - /// The type of the elements of the source. - /// The IEnumerable<T> to perform the action on. - /// The Action<T> delegate to perform on each element of the IEnumerable<T>. - public static void ForEach(this IEnumerable source, Action action) - { - foreach (var element in source) - { - action(element); - } - } - - /// - /// Correlates the elements of two sequences based on matching keys. The default equality comparer is used to compare keys. - /// - /// The type of the elements of the first sequence. - /// The type of the elements of the second sequence. - /// The type of the keys returned by the key selector functions. - /// The type of the result elements. - /// The first sequence to join. - /// The sequence to left join to the first sequence. - /// A function to extract the join key from each element of the first sequence. - /// A function to extract the join key from each element of the second sequence. - /// A function to create a result element from two matching elements. - /// An System.Linq.IQueryable<TResult> that has elements of type TResult obtained by performing an inner join on two sequences. - [Pure] - public static IQueryable LeftJoin(this IQueryable outer, - IEnumerable inner, - Expression> outerKeySelector, - Expression> innerKeySelector, - Expression> resultSelector) - { - var leftJoinedQueryable = outer - .GroupJoin(inner, outerKeySelector, innerKeySelector, (outerItem, innerItems) => new { Outer = outerItem, IEnumerableInner = innerItems }) - .SelectMany(grouping => grouping.IEnumerableInner.DefaultIfEmpty(), (grouping, innerItem) => new { Outer = grouping.Outer, Inner = innerItem }); - return ApplyExpandedSelect(leftJoinedQueryable, pair => resultSelector.Invoke(pair.Outer, pair.Inner)); - } - - [Pure] - private static IQueryable ApplyExpandedSelect(IQueryable inputs, Expression> selector) - { - return inputs.Select(selector.Expand()); - } - -#if !(NET35 || NET40) - /// LinqKit: Compile and invoke - [Pure] - public static TResult Invoke( - this Expression> expr, T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5) - { - return expr.Compile().Invoke(arg1, arg2, arg3, arg4, arg5); - } - - /// LinqKit: Compile and invoke - [Pure] - public static TResult Invoke( - this Expression> expr, T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, - T6 arg6) - { - return expr.Compile().Invoke(arg1, arg2, arg3, arg4, arg5, arg6); - } - - /// LinqKit: Compile and invoke - [Pure] - public static TResult Invoke( - this Expression> expr, T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, - T6 arg6, T7 arg7) - { - return expr.Compile().Invoke(arg1, arg2, arg3, arg4, arg5, arg6, arg7); - } - - /// LinqKit: Compile and invoke - [Pure] - public static TResult Invoke( - this Expression> expr, T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, - T6 arg6, T7 arg7, T8 arg8) - { - return expr.Compile().Invoke(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8); - } - - /// LinqKit: Compile and invoke - [Pure] - public static TResult Invoke( - this Expression> expr, T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, - T6 arg6, T7 arg7, T8 arg8, T9 arg9) - { - return expr.Compile().Invoke(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9); - } - - /// LinqKit: Compile and invoke - [Pure] - public static TResult Invoke( - this Expression> expr, T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, - T6 arg6, T7 arg7, T8 arg8, T9 arg9, T10 arg10) - { - return expr.Compile().Invoke(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10); - } - - /// LinqKit: Compile and invoke - [Pure] - public static TResult Invoke( - this Expression> expr, T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, - T6 arg6, T7 arg7, T8 arg8, T9 arg9, T10 arg10, T11 arg11) - { - return expr.Compile().Invoke(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11); - } - - /// LinqKit: Compile and invoke - [Pure] - public static TResult Invoke( - this Expression> expr, T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, - T6 arg6, T7 arg7, T8 arg8, T9 arg9, T10 arg10, T11 arg11, T12 arg12) - { - return expr.Compile().Invoke(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12); - } - - /// LinqKit: Compile and invoke - [Pure] - public static TResult Invoke( - this Expression> expr, T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, - T6 arg6, T7 arg7, T8 arg8, T9 arg9, T10 arg10, T11 arg11, T12 arg12, T13 arg13) - { - return expr.Compile().Invoke(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13); - } - - /// LinqKit: Compile and invoke - [Pure] - public static TResult Invoke( - this Expression> expr, T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, - T6 arg6, T7 arg7, T8 arg8, T9 arg9, T10 arg10, T11 arg11, T12 arg12, T13 arg13, T14 arg14) - { - return expr.Compile().Invoke(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14); - } - - /// LinqKit: Compile and invoke - [Pure] - public static TResult Invoke( - this Expression> expr, T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, - T6 arg6, T7 arg7, T8 arg8, T9 arg9, T10 arg10, T11 arg11, T12 arg12, T13 arg13, T14 arg14, T15 arg15) - { - return expr.Compile().Invoke(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15); - } - - /// LinqKit: Compile and invoke - [Pure] - public static TResult Invoke( - this Expression> expr, T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, - T6 arg6, T7 arg7, T8 arg8, T9 arg9, T10 arg10, T11 arg11, T12 arg12, T13 arg13, T14 arg14, T15 arg15, T16 arg16) - { - return expr.Compile().Invoke(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16); - } -#endif - } -} -#endif +} \ No newline at end of file diff --git a/src/LinqKit.Core/ExtensionsCore.cs b/src/LinqKit.Core/ExtensionsCore.cs new file mode 100644 index 0000000..5bdf022 --- /dev/null +++ b/src/LinqKit.Core/ExtensionsCore.cs @@ -0,0 +1,242 @@ +#if NOEF +namespace LinqKit +{ + using System; + using System.Collections.Generic; + using System.Linq.Expressions; + using JetBrains.Annotations; + + /// + /// Refer to http://www.albahari.com/nutshell/linqkit.html and http://tomasp.net/blog/linq-expand.aspx for more information. + /// + public static partial class ExtensionsCore + { + /// LinqKit: Expands expression + [Pure] + public static Expression Expand(this Expression expr) + { + return (Expression)new ExpressionExpander().Visit(expr); + } + + /// LinqKit: Expands expression + [Pure] + public static Expression Expand(this ExpressionStarter expr) + { + return expr != null && (expr.IsStarted || expr.UseDefaultExpression) ? new ExpressionExpander().Visit(expr) : null; + } + + /// LinqKit: Expands expression + [Pure] + public static Expression Expand(this Expression expr) + { + return new ExpressionExpander().Visit(expr); + } + + /// LinqKit: Compile and invoke + [Pure] + public static TResult Invoke(this Expression> expr) + { + return expr.Compile().Invoke(); + } + + /// LinqKit: Compile and invoke + [Pure] + public static TResult Invoke(this Expression> expr, T1 arg1) + { + return expr.Compile().Invoke(arg1); + } + + /// LinqKit: Compile and invoke + [Pure] + public static TResult Invoke(this Expression> expr, T1 arg1, T2 arg2) + { + return expr.Compile().Invoke(arg1, arg2); + } + + /// LinqKit: Compile and invoke + [Pure] + public static TResult Invoke( + this Expression> expr, T1 arg1, T2 arg2, T3 arg3) + { + return expr.Compile().Invoke(arg1, arg2, arg3); + } + + /// LinqKit: Compile and invoke + [Pure] + public static TResult Invoke( + this Expression> expr, T1 arg1, T2 arg2, T3 arg3, T4 arg4) + { + return expr.Compile().Invoke(arg1, arg2, arg3, arg4); + } + + /// + /// Performs the specified action on each element of the IEnumerable<T>. + /// + /// The type of the elements of the source. + /// The IEnumerable<T> to perform the action on. + /// The Action<T> delegate to perform on each element of the IEnumerable<T>. + public static void ForEach(this IEnumerable source, Action action) + { + foreach (var element in source) + { + action(element); + } + } + +#if !(NET35 || NET40) + /// LinqKit: Compile and invoke + [Pure] + public static TResult Invoke( + this Expression> expr, T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5) + { + return expr.Compile().Invoke(arg1, arg2, arg3, arg4, arg5); + } + + /// LinqKit: Compile and invoke + [Pure] + public static TResult Invoke( + this Expression> expr, T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, + T6 arg6) + { + return expr.Compile().Invoke(arg1, arg2, arg3, arg4, arg5, arg6); + } + + /// LinqKit: Compile and invoke + [Pure] + public static TResult Invoke( + this Expression> expr, T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, + T6 arg6, T7 arg7) + { + return expr.Compile().Invoke(arg1, arg2, arg3, arg4, arg5, arg6, arg7); + } + + /// LinqKit: Compile and invoke + [Pure] + public static TResult Invoke( + this Expression> expr, T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, + T6 arg6, T7 arg7, T8 arg8) + { + return expr.Compile().Invoke(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8); + } + + /// LinqKit: Compile and invoke + [Pure] + public static TResult Invoke( + this Expression> expr, T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, + T6 arg6, T7 arg7, T8 arg8, T9 arg9) + { + return expr.Compile().Invoke(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9); + } + + /// LinqKit: Compile and invoke + [Pure] + public static TResult Invoke( + this Expression> expr, T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, + T6 arg6, T7 arg7, T8 arg8, T9 arg9, T10 arg10) + { + return expr.Compile().Invoke(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10); + } + + /// LinqKit: Compile and invoke + [Pure] + public static TResult Invoke( + this Expression> expr, T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, + T6 arg6, T7 arg7, T8 arg8, T9 arg9, T10 arg10, T11 arg11) + { + return expr.Compile().Invoke(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11); + } + + /// LinqKit: Compile and invoke + [Pure] + public static TResult Invoke( + this Expression> expr, T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, + T6 arg6, T7 arg7, T8 arg8, T9 arg9, T10 arg10, T11 arg11, T12 arg12) + { + return expr.Compile().Invoke(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12); + } + + /// LinqKit: Compile and invoke + [Pure] + public static TResult Invoke( + this Expression> expr, T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, + T6 arg6, T7 arg7, T8 arg8, T9 arg9, T10 arg10, T11 arg11, T12 arg12, T13 arg13) + { + return expr.Compile().Invoke(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13); + } + + /// LinqKit: Compile and invoke + [Pure] + public static TResult Invoke( + this Expression> expr, T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, + T6 arg6, T7 arg7, T8 arg8, T9 arg9, T10 arg10, T11 arg11, T12 arg12, T13 arg13, T14 arg14) + { + return expr.Compile().Invoke(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14); + } + + /// LinqKit: Compile and invoke + [Pure] + public static TResult Invoke( + this Expression> expr, T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, + T6 arg6, T7 arg7, T8 arg8, T9 arg9, T10 arg10, T11 arg11, T12 arg12, T13 arg13, T14 arg14, T15 arg15) + { + return expr.Compile().Invoke(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15); + } + + /// LinqKit: Compile and invoke + [Pure] + public static TResult Invoke( + this Expression> expr, T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, + T6 arg6, T7 arg7, T8 arg8, T9 arg9, T10 arg10, T11 arg11, T12 arg12, T13 arg13, T14 arg14, T15 arg15, T16 arg16) + { + return expr.Compile().Invoke(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16); + } +#endif + } +} +#endif + +#if !NET10_0_OR_GREATER +namespace LinqKit +{ + using System; + using System.Linq; + using System.Collections.Generic; + using System.Linq.Expressions; + using JetBrains.Annotations; + + public static partial class ExtensionsCore + { + /// + /// Correlates the elements of two sequences based on matching keys. The default equality comparer is used to compare keys. + /// + /// The type of the elements of the first sequence. + /// The type of the elements of the second sequence. + /// The type of the keys returned by the key selector functions. + /// The type of the result elements. + /// The first sequence to join. + /// The sequence to left join to the first sequence. + /// A function to extract the join key from each element of the first sequence. + /// A function to extract the join key from each element of the second sequence. + /// A function to create a result element from two matching elements. + /// An System.Linq.IQueryable<TResult> that has elements of type TResult obtained by performing an inner join on two sequences. + [Pure] + public static IQueryable LeftJoin(this IQueryable outer, + IEnumerable inner, + Expression> outerKeySelector, + Expression> innerKeySelector, + Expression> resultSelector) + { + var leftJoinedQueryable = outer + .GroupJoin(inner, outerKeySelector, innerKeySelector, (outerItem, innerItems) => new { Outer = outerItem, IEnumerableInner = innerItems }) + .SelectMany(grouping => grouping.IEnumerableInner.DefaultIfEmpty(), (grouping, innerItem) => new { Outer = grouping.Outer, Inner = innerItem }); + return ApplyExpandedSelect(leftJoinedQueryable, pair => resultSelector.Invoke(pair.Outer, pair.Inner)); + } + + [Pure] + private static IQueryable ApplyExpandedSelect(IQueryable inputs, Expression> selector) + { + return inputs.Select(selector.Expand()); + } + } +} +#endif \ No newline at end of file diff --git a/src/LinqKit.Core/LinqKit.Core.csproj b/src/LinqKit.Core/LinqKit.Core.csproj index a39eee1..1283ee9 100644 --- a/src/LinqKit.Core/LinqKit.Core.csproj +++ b/src/LinqKit.Core/LinqKit.Core.csproj @@ -6,7 +6,7 @@ LinqKit.Core contains extensions for LINQ to SQL and Entity Framework. Note that Include(...), IAsync and IDbAsync are not supported. LinqKit.Core Joseph Albahari;Tomas Petricek;Scott Smith;Tuomas Hietanen;Stef Heyenrath - net35;net40;net45;portable-net40+win8+wpa81+wp8+sl5;portable-net45+win8+wpa81+wp8;uap10.0;netstandard1.3;netstandard2.0;netstandard2.1 + net35;net40;net45;portable-net40+win8+wpa81+wp8+sl5;portable-net45+win8+wpa81+wp8;uap10.0;netstandard1.3;netstandard2.0;netstandard2.1;net10.0 true LinqKit.Core LinqKit @@ -25,7 +25,7 @@ - net40;net45;netstandard1.3;netstandard2.0;netstandard2.1 + net40;net45;netstandard1.3;netstandard2.0;netstandard2.1;net10.0 @@ -173,12 +173,11 @@ - - + All @@ -192,7 +191,6 @@ - diff --git a/src/LinqKit/LinqKit.csproj b/src/LinqKit/LinqKit.csproj index 758a5f7..b63ab50 100644 --- a/src/LinqKit/LinqKit.csproj +++ b/src/LinqKit/LinqKit.csproj @@ -6,7 +6,7 @@ LinqKit.EntityFramework contains extensions for LINQ to SQL and Entity Framework. Include(...) and IAsync are supported. LinqKit for EntityFramework with Include(...) and IAsync support. Joseph Albahari;Tomas Petricek;Scott Smith;Tuomas Hietanen;Stef Heyenrath - net45;netstandard2.1 + net45;netstandard2.1;net10.0 $(DefineConstants);EF true LinqKit diff --git a/tests/LinqKit.Core.Tests/LeftJoinTests.cs b/tests/LinqKit.Core.Tests/LeftJoinTests.cs new file mode 100644 index 0000000..cc94252 --- /dev/null +++ b/tests/LinqKit.Core.Tests/LeftJoinTests.cs @@ -0,0 +1,51 @@ +using System.Collections.Generic; +using System.Linq; +using System.Linq.Expressions; +using FluentAssertions; +using LinqKit; +using LinqKitCoreTests.Model; +using Xunit; + +// Define specific namespace +// Just to show issue https://github.com/scottksmith95/LINQKit/issues/218 +namespace LinqKitCoreTests; + +public class LeftJoinTests +{ + [Fact] + public void LeftJoin() + { + var testEntities = new List + { + new() { Id = 1, Value = "One" }, + new() { Id = 2, ParentId = 1, Value = "Two" } + }; + + var outer = testEntities.AsQueryable(); + var inner = testEntities; + + outer.LeftJoin( + inner, + entity => entity.ParentId, + parentEntity => parentEntity.Id, + (entity, parentEntity) => new + { + entity.Value, + ParentValue = parentEntity == null ? null : parentEntity.Value + }) + .Should() + .BeEquivalentTo( + [ + new {Value = "One", ParentValue = (string) null}, + new {Value = "Two", ParentValue = "One"} + ], string.Empty); //message is to select the generic overload + } + + [Fact] + public void Expand() + { + var exp = Expression.Add(Expression.Constant(5), Expression.Constant(2)); + var executed = exp.Expand().ToString(); + Assert.Equal(exp.ToString(), executed); + } +} \ No newline at end of file diff --git a/tests/LinqKit.Core.Tests/LinqKit.Core.Tests.csproj b/tests/LinqKit.Core.Tests/LinqKit.Core.Tests.csproj new file mode 100644 index 0000000..cb2cf3b --- /dev/null +++ b/tests/LinqKit.Core.Tests/LinqKit.Core.Tests.csproj @@ -0,0 +1,35 @@ + + + + Stef Heyenrath + net452;net8.0;net9.0;net10.0 + latest + $(DefineConstants);NOEF + LinqKitCoreTests + + + + + + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tests/LinqKit.Core.Tests/Model/TestEntity.cs b/tests/LinqKit.Core.Tests/Model/TestEntity.cs new file mode 100644 index 0000000..a888c2a --- /dev/null +++ b/tests/LinqKit.Core.Tests/Model/TestEntity.cs @@ -0,0 +1,10 @@ +namespace LinqKitCoreTests.Model; + +public class TestEntity +{ + public int Id { get; set; } + + public int? ParentId { get; set; } + + public string Value { get; set; } +} \ No newline at end of file diff --git a/tests/LinqKit.EntityFramework.Tests.Net452/LinqKit.EntityFramework.Tests.Net452.csproj b/tests/LinqKit.EntityFramework.Tests.Net452/LinqKit.EntityFramework.Tests.Net452.csproj index 46d6bbf..5d3fb19 100644 --- a/tests/LinqKit.EntityFramework.Tests.Net452/LinqKit.EntityFramework.Tests.Net452.csproj +++ b/tests/LinqKit.EntityFramework.Tests.Net452/LinqKit.EntityFramework.Tests.Net452.csproj @@ -30,8 +30,4 @@ - - - - \ No newline at end of file diff --git a/tests/LinqKit.Microsoft.EntityFrameworkCore.TestFiles/ExtensionsCoreTests.cs b/tests/LinqKit.Microsoft.EntityFrameworkCore.TestFiles/ExtensionsCoreTests.cs index 8a6fbd2..ec68406 100644 --- a/tests/LinqKit.Microsoft.EntityFrameworkCore.TestFiles/ExtensionsCoreTests.cs +++ b/tests/LinqKit.Microsoft.EntityFrameworkCore.TestFiles/ExtensionsCoreTests.cs @@ -2,45 +2,42 @@ using LinqKit.Microsoft.EntityFrameworkCore.Tests.Model; using Microsoft.EntityFrameworkCore; using Xunit; +#if NET10_0_OR_GREATER +using System.Linq; +#endif -namespace LinqKit.Microsoft.EntityFrameworkCore.Tests +namespace LinqKit.Microsoft.EntityFrameworkCore.Tests; + +public class ExtensionsCoreTests { - public class ExtensionsCoreTests + [Fact] + public void LeftJoinTest() { + var builder = new DbContextOptionsBuilder(); + builder.UseSqlite("DataSource=testdb;mode=memory"); - [Fact] - public void LeftJoinTest() - { - var builder = new DbContextOptionsBuilder(); - builder - .UseSqlite("DataSource=testdb;mode=memory"); - - using (var context = new TestContext(builder.Options)) - { - context.Database.OpenConnection(); - context.Database.EnsureCreated(); - - context.TestEntities.Add(new TestEntity {Id = 1, Value = "One"}); - context.TestEntities.Add(new TestEntity {Id = 2, ParentId = 1, Value = "Two"}); - context.SaveChanges(); + using var context = new TestContext(builder.Options); + context.Database.OpenConnection(); + context.Database.EnsureCreated(); - context.TestEntities.LeftJoin( - context.TestEntities, - entity => entity.ParentId, - parentEntity => parentEntity.Id, - (entity, parentEntity) => new - { - entity.Value, - ParentValue = parentEntity == null ? null : parentEntity.Value - }) - .Should() - .BeEquivalentTo(new[] - { - new {Value = "One", ParentValue = (string) null}, - new {Value = "Two", ParentValue = "One"} - }, string.Empty); //message is to select the generic overload - } - } + context.TestEntities.Add(new TestEntity { Id = 1, Value = "One" }); + context.TestEntities.Add(new TestEntity { Id = 2, ParentId = 1, Value = "Two" }); + context.SaveChanges(); + context.TestEntities.LeftJoin( + context.TestEntities, + entity => entity.ParentId, + parentEntity => parentEntity.Id, + (entity, parentEntity) => new + { + entity.Value, + ParentValue = parentEntity == null ? null : parentEntity.Value + }) + .Should() + .BeEquivalentTo( + [ + new {Value = "One", ParentValue = (string) null}, + new {Value = "Two", ParentValue = "One"} + ], string.Empty); //message is to select the generic overload } } \ No newline at end of file diff --git a/tests/LinqKit.Microsoft.EntityFrameworkCore.Tests/LinqKit.Microsoft.EntityFrameworkCore.Tests.csproj b/tests/LinqKit.Microsoft.EntityFrameworkCore.Tests/LinqKit.Microsoft.EntityFrameworkCore.Tests.csproj index da9830f..3d6c9dd 100644 --- a/tests/LinqKit.Microsoft.EntityFrameworkCore.Tests/LinqKit.Microsoft.EntityFrameworkCore.Tests.csproj +++ b/tests/LinqKit.Microsoft.EntityFrameworkCore.Tests/LinqKit.Microsoft.EntityFrameworkCore.Tests.csproj @@ -3,6 +3,7 @@ Stef Heyenrath netcoreapp2.1 + latest $(DefineConstants);EFCORE LinqKit.Microsoft.EntityFrameworkCore.Tests LinqKit.Microsoft.EntityFrameworkCore.Tests @@ -22,7 +23,7 @@ - + all diff --git a/tests/LinqKit.Microsoft.EntityFrameworkCore10.Tests/LinqKit.Microsoft.EntityFrameworkCore10.Tests.csproj b/tests/LinqKit.Microsoft.EntityFrameworkCore10.Tests/LinqKit.Microsoft.EntityFrameworkCore10.Tests.csproj index 95807ff..d524b98 100644 --- a/tests/LinqKit.Microsoft.EntityFrameworkCore10.Tests/LinqKit.Microsoft.EntityFrameworkCore10.Tests.csproj +++ b/tests/LinqKit.Microsoft.EntityFrameworkCore10.Tests/LinqKit.Microsoft.EntityFrameworkCore10.Tests.csproj @@ -3,6 +3,7 @@ Stef Heyenrath net10.0 + latest LinqKit.Microsoft.EntityFrameworkCore10.Tests LinqKit.Microsoft.EntityFrameworkCore10.Tests true @@ -24,7 +25,7 @@ - + all diff --git a/tests/LinqKit.Microsoft.EntityFrameworkCore31.Tests/LinqKit.Microsoft.EntityFrameworkCore31.Tests.csproj b/tests/LinqKit.Microsoft.EntityFrameworkCore31.Tests/LinqKit.Microsoft.EntityFrameworkCore31.Tests.csproj index 99dddb5..1c8376c 100644 --- a/tests/LinqKit.Microsoft.EntityFrameworkCore31.Tests/LinqKit.Microsoft.EntityFrameworkCore31.Tests.csproj +++ b/tests/LinqKit.Microsoft.EntityFrameworkCore31.Tests/LinqKit.Microsoft.EntityFrameworkCore31.Tests.csproj @@ -3,6 +3,7 @@ Stef Heyenrath netcoreapp3.1 + latest LinqKit.Microsoft.EntityFrameworkCore31.Tests LinqKit.Microsoft.EntityFrameworkCore31.Tests true @@ -24,7 +25,7 @@ - + all diff --git a/tests/LinqKit.Microsoft.EntityFrameworkCore5.Tests/LinqKit.Microsoft.EntityFrameworkCore5.Tests.csproj b/tests/LinqKit.Microsoft.EntityFrameworkCore5.Tests/LinqKit.Microsoft.EntityFrameworkCore5.Tests.csproj index 460c33c..10bfed6 100644 --- a/tests/LinqKit.Microsoft.EntityFrameworkCore5.Tests/LinqKit.Microsoft.EntityFrameworkCore5.Tests.csproj +++ b/tests/LinqKit.Microsoft.EntityFrameworkCore5.Tests/LinqKit.Microsoft.EntityFrameworkCore5.Tests.csproj @@ -3,6 +3,7 @@ Stef Heyenrath net5.0 + latest LinqKit.Microsoft.EntityFrameworkCore5.Tests LinqKit.Microsoft.EntityFrameworkCore5.Tests true @@ -24,7 +25,7 @@ - + all diff --git a/tests/LinqKit.Microsoft.EntityFrameworkCore6.Tests/LinqKit.Microsoft.EntityFrameworkCore6.Tests.csproj b/tests/LinqKit.Microsoft.EntityFrameworkCore6.Tests/LinqKit.Microsoft.EntityFrameworkCore6.Tests.csproj index b0e3790..2b02a66 100644 --- a/tests/LinqKit.Microsoft.EntityFrameworkCore6.Tests/LinqKit.Microsoft.EntityFrameworkCore6.Tests.csproj +++ b/tests/LinqKit.Microsoft.EntityFrameworkCore6.Tests/LinqKit.Microsoft.EntityFrameworkCore6.Tests.csproj @@ -3,6 +3,7 @@ Stef Heyenrath net6.0 + latest LinqKit.Microsoft.EntityFrameworkCore6.Tests LinqKit.Microsoft.EntityFrameworkCore6.Tests true @@ -24,7 +25,7 @@ - + all diff --git a/tests/LinqKit.Microsoft.EntityFrameworkCore7.Tests/LinqKit.Microsoft.EntityFrameworkCore7.Tests.csproj b/tests/LinqKit.Microsoft.EntityFrameworkCore7.Tests/LinqKit.Microsoft.EntityFrameworkCore7.Tests.csproj index a60e8f4..33c3573 100644 --- a/tests/LinqKit.Microsoft.EntityFrameworkCore7.Tests/LinqKit.Microsoft.EntityFrameworkCore7.Tests.csproj +++ b/tests/LinqKit.Microsoft.EntityFrameworkCore7.Tests/LinqKit.Microsoft.EntityFrameworkCore7.Tests.csproj @@ -3,6 +3,7 @@ Stef Heyenrath net7.0 + latest LinqKit.Microsoft.EntityFrameworkCore7.Tests LinqKit.Microsoft.EntityFrameworkCore7.Tests true @@ -24,7 +25,7 @@ - + all diff --git a/tests/LinqKit.Microsoft.EntityFrameworkCore8.Tests/LinqKit.Microsoft.EntityFrameworkCore8.Tests.csproj b/tests/LinqKit.Microsoft.EntityFrameworkCore8.Tests/LinqKit.Microsoft.EntityFrameworkCore8.Tests.csproj index 0dc6f23..07fb172 100644 --- a/tests/LinqKit.Microsoft.EntityFrameworkCore8.Tests/LinqKit.Microsoft.EntityFrameworkCore8.Tests.csproj +++ b/tests/LinqKit.Microsoft.EntityFrameworkCore8.Tests/LinqKit.Microsoft.EntityFrameworkCore8.Tests.csproj @@ -3,6 +3,7 @@ Stef Heyenrath net8.0 + latest LinqKit.Microsoft.EntityFrameworkCore8.Tests LinqKit.Microsoft.EntityFrameworkCore8.Tests true @@ -24,7 +25,7 @@ - + all diff --git a/tests/LinqKit.Microsoft.EntityFrameworkCore9.Tests/LinqKit.Microsoft.EntityFrameworkCore9.Tests.csproj b/tests/LinqKit.Microsoft.EntityFrameworkCore9.Tests/LinqKit.Microsoft.EntityFrameworkCore9.Tests.csproj index 7cb4929..3ec56bb 100644 --- a/tests/LinqKit.Microsoft.EntityFrameworkCore9.Tests/LinqKit.Microsoft.EntityFrameworkCore9.Tests.csproj +++ b/tests/LinqKit.Microsoft.EntityFrameworkCore9.Tests/LinqKit.Microsoft.EntityFrameworkCore9.Tests.csproj @@ -3,6 +3,7 @@ Stef Heyenrath net9.0 + latest LinqKit.Microsoft.EntityFrameworkCore9.Tests LinqKit.Microsoft.EntityFrameworkCore9.Tests true @@ -24,7 +25,7 @@ - + all diff --git a/tests/LinqKit.Tests/LinqKit.Tests.csproj b/tests/LinqKit.Tests/LinqKit.Tests.csproj index d7ab774..6f9aade 100644 --- a/tests/LinqKit.Tests/LinqKit.Tests.csproj +++ b/tests/LinqKit.Tests/LinqKit.Tests.csproj @@ -1,4 +1,4 @@ - + Stef Heyenrath