Browse Source

新增异步for,linq扩展最值改进

懒得勤快 4 years ago
parent
commit
a7a0866913

+ 25 - 0
Masuit.Tools.Abstractions/Extensions/BaseType/IEnumerableExtensions.cs

@@ -227,5 +227,30 @@ namespace Masuit.Tools
         {
             return Task.WhenAll(source.Select(selector));
         }
+
+        /// <summary>
+        /// 异步Select
+        /// </summary>
+        /// <typeparam name="T"></typeparam>
+        /// <typeparam name="TResult"></typeparam>
+        /// <param name="source"></param>
+        /// <param name="selector"></param>
+        /// <returns></returns>
+        public static Task<TResult[]> SelectAsync<T, TResult>(this IEnumerable<T> source, Func<T, int, Task<TResult>> selector)
+        {
+            return Task.WhenAll(source.Select(selector));
+        }
+
+        /// <summary>
+        /// 异步For
+        /// </summary>
+        /// <typeparam name="T"></typeparam>
+        /// <param name="source"></param>
+        /// <param name="selector"></param>
+        /// <returns></returns>
+        public static Task ForAsync<T>(this IEnumerable<T> source, Func<T, int, Task> selector)
+        {
+            return Task.WhenAll(source.Select(selector));
+        }
     }
 }

+ 16 - 16
Masuit.Tools.Abstractions/Linq/LinqExtension.cs

@@ -56,7 +56,7 @@ namespace Masuit.Tools.Linq
         /// <param name="source"></param>
         /// <param name="selector"></param>
         /// <returns></returns>
-        public static TResult MaxOrDefault<TSource, TResult>(this IQueryable<TSource> source, Expression<Func<TSource, TResult>> selector) => source.Select(selector).OrderByDescending(_ => _).FirstOrDefault();
+        public static TResult MaxOrDefault<TSource, TResult>(this IQueryable<TSource> source, Expression<Func<TSource, TResult>> selector) => source.Select(selector).DefaultIfEmpty().Max();
 
         /// <summary>
         /// 取最大值
@@ -67,7 +67,7 @@ namespace Masuit.Tools.Linq
         /// <param name="selector"></param>
         /// <param name="defaultValue"></param>
         /// <returns></returns>
-        public static TResult MaxOrDefault<TSource, TResult>(this IQueryable<TSource> source, Expression<Func<TSource, TResult>> selector, TResult defaultValue) => source.Select(selector).OrderByDescending(_ => _).FirstOrDefault() ?? defaultValue;
+        public static TResult MaxOrDefault<TSource, TResult>(this IQueryable<TSource> source, Expression<Func<TSource, TResult>> selector, TResult defaultValue) => source.Select(selector).DefaultIfEmpty(defaultValue).Max();
 
         /// <summary>
         /// 取最大值
@@ -75,7 +75,7 @@ namespace Masuit.Tools.Linq
         /// <typeparam name="TSource"></typeparam>
         /// <param name="source"></param>
         /// <returns></returns>
-        public static TSource MaxOrDefault<TSource>(this IQueryable<TSource> source) => source.OrderByDescending(_ => _).FirstOrDefault();
+        public static TSource MaxOrDefault<TSource>(this IQueryable<TSource> source) => source.DefaultIfEmpty().Max();
 
         /// <summary>
         /// 取最大值
@@ -84,7 +84,7 @@ namespace Masuit.Tools.Linq
         /// <param name="source"></param>
         /// <param name="defaultValue"></param>
         /// <returns></returns>
-        public static TSource MaxOrDefault<TSource>(this IQueryable<TSource> source, TSource defaultValue) => source.OrderByDescending(_ => _).FirstOrDefault() ?? defaultValue;
+        public static TSource MaxOrDefault<TSource>(this IQueryable<TSource> source, TSource defaultValue) => source.DefaultIfEmpty(defaultValue).Max();
 
         /// <summary>
         /// 取最大值
@@ -95,7 +95,7 @@ namespace Masuit.Tools.Linq
         /// <param name="selector"></param>
         /// <param name="defaultValue"></param>
         /// <returns></returns>
-        public static TResult MaxOrDefault<TSource, TResult>(this IEnumerable<TSource> source, Func<TSource, TResult> selector, TResult defaultValue) => source.Select(selector).OrderByDescending(_ => _).FirstOrDefault() ?? defaultValue;
+        public static TResult MaxOrDefault<TSource, TResult>(this IEnumerable<TSource> source, Func<TSource, TResult> selector, TResult defaultValue) => source.Select(selector).DefaultIfEmpty(defaultValue).Max();
 
         /// <summary>
         /// 取最大值
@@ -105,7 +105,7 @@ namespace Masuit.Tools.Linq
         /// <param name="source"></param>
         /// <param name="selector"></param>
         /// <returns></returns>
-        public static TResult MaxOrDefault<TSource, TResult>(this IEnumerable<TSource> source, Func<TSource, TResult> selector) => source.Select(selector).OrderByDescending(_ => _).FirstOrDefault();
+        public static TResult MaxOrDefault<TSource, TResult>(this IEnumerable<TSource> source, Func<TSource, TResult> selector) => source.Select(selector).DefaultIfEmpty().Max();
 
         /// <summary>
         /// 取最大值
@@ -113,7 +113,7 @@ namespace Masuit.Tools.Linq
         /// <typeparam name="TSource"></typeparam>
         /// <param name="source"></param>
         /// <returns></returns>
-        public static TSource MaxOrDefault<TSource>(this IEnumerable<TSource> source) => source.OrderByDescending(_ => _).FirstOrDefault();
+        public static TSource MaxOrDefault<TSource>(this IEnumerable<TSource> source) => source.DefaultIfEmpty().Max();
 
         /// <summary>
         /// 取最大值
@@ -122,7 +122,7 @@ namespace Masuit.Tools.Linq
         /// <param name="source"></param>
         /// <param name="defaultValue"></param>
         /// <returns></returns>
-        public static TSource MaxOrDefault<TSource>(this IEnumerable<TSource> source, TSource defaultValue) => source.OrderByDescending(_ => _).FirstOrDefault() ?? defaultValue;
+        public static TSource MaxOrDefault<TSource>(this IEnumerable<TSource> source, TSource defaultValue) => source.DefaultIfEmpty(defaultValue).Max();
 
         /// <summary>
         /// 取最小值
@@ -132,7 +132,7 @@ namespace Masuit.Tools.Linq
         /// <param name="source"></param>
         /// <param name="selector"></param>
         /// <returns></returns>
-        public static TResult MinOrDefault<TSource, TResult>(this IQueryable<TSource> source, Expression<Func<TSource, TResult>> selector) => source.Select(selector).OrderBy(_ => _).FirstOrDefault();
+        public static TResult MinOrDefault<TSource, TResult>(this IQueryable<TSource> source, Expression<Func<TSource, TResult>> selector) => source.Select(selector).DefaultIfEmpty().Min();
 
         /// <summary>
         /// 取最小值
@@ -143,7 +143,7 @@ namespace Masuit.Tools.Linq
         /// <param name="selector"></param>
         /// <param name="defaultValue"></param>
         /// <returns></returns>
-        public static TResult MinOrDefault<TSource, TResult>(this IQueryable<TSource> source, Expression<Func<TSource, TResult>> selector, TResult defaultValue) => source.Select(selector).OrderBy(_ => _).FirstOrDefault() ?? defaultValue;
+        public static TResult MinOrDefault<TSource, TResult>(this IQueryable<TSource> source, Expression<Func<TSource, TResult>> selector, TResult defaultValue) => source.Select(selector).DefaultIfEmpty(defaultValue).Min();
 
         /// <summary>
         /// 取最小值
@@ -151,7 +151,7 @@ namespace Masuit.Tools.Linq
         /// <typeparam name="TSource"></typeparam>
         /// <param name="source"></param>
         /// <returns></returns>
-        public static TSource MinOrDefault<TSource>(this IQueryable<TSource> source) => source.OrderBy(_ => _).FirstOrDefault();
+        public static TSource MinOrDefault<TSource>(this IQueryable<TSource> source) => source.DefaultIfEmpty().Min();
 
         /// <summary>
         /// 取最小值
@@ -160,7 +160,7 @@ namespace Masuit.Tools.Linq
         /// <param name="source"></param>
         /// <param name="defaultValue"></param>
         /// <returns></returns>
-        public static TSource MinOrDefault<TSource>(this IQueryable<TSource> source, TSource defaultValue) => source.OrderBy(_ => _).FirstOrDefault() ?? defaultValue;
+        public static TSource MinOrDefault<TSource>(this IQueryable<TSource> source, TSource defaultValue) => source.DefaultIfEmpty(defaultValue).Min();
 
         /// <summary>
         /// 取最小值
@@ -170,7 +170,7 @@ namespace Masuit.Tools.Linq
         /// <param name="source"></param>
         /// <param name="selector"></param>
         /// <returns></returns>
-        public static TResult MinOrDefault<TSource, TResult>(this IEnumerable<TSource> source, Func<TSource, TResult> selector) => source.Select(selector).OrderBy(_ => _).FirstOrDefault();
+        public static TResult MinOrDefault<TSource, TResult>(this IEnumerable<TSource> source, Func<TSource, TResult> selector) => source.Select(selector).DefaultIfEmpty().Min();
 
         /// <summary>
         /// 取最小值
@@ -181,7 +181,7 @@ namespace Masuit.Tools.Linq
         /// <param name="selector"></param>
         /// <param name="defaultValue"></param>
         /// <returns></returns>
-        public static TResult MinOrDefault<TSource, TResult>(this IEnumerable<TSource> source, Func<TSource, TResult> selector, TResult defaultValue) => source.Select(selector).OrderBy(_ => _).FirstOrDefault() ?? defaultValue;
+        public static TResult MinOrDefault<TSource, TResult>(this IEnumerable<TSource> source, Func<TSource, TResult> selector, TResult defaultValue) => source.Select(selector).DefaultIfEmpty(defaultValue).Min();
 
         /// <summary>
         /// 取最小值
@@ -189,7 +189,7 @@ namespace Masuit.Tools.Linq
         /// <typeparam name="TSource"></typeparam>
         /// <param name="source"></param>
         /// <returns></returns>
-        public static TSource MinOrDefault<TSource>(this IEnumerable<TSource> source) => source.OrderBy(_ => _).FirstOrDefault();
+        public static TSource MinOrDefault<TSource>(this IEnumerable<TSource> source) => source.DefaultIfEmpty().Min();
 
         /// <summary>
         /// 取最小值
@@ -198,7 +198,7 @@ namespace Masuit.Tools.Linq
         /// <param name="source"></param>
         /// <param name="defaultValue"></param>
         /// <returns></returns>
-        public static TSource MinOrDefault<TSource>(this IEnumerable<TSource> source, TSource defaultValue) => source.OrderBy(_ => _).FirstOrDefault() ?? defaultValue;
+        public static TSource MinOrDefault<TSource>(this IEnumerable<TSource> source, TSource defaultValue) => source.DefaultIfEmpty(defaultValue).Min();
     }
 
     internal class SubstituteParameterVisitor : ExpressionVisitor

+ 3 - 3
Masuit.Tools.Abstractions/Masuit.Tools.Abstractions.csproj

@@ -7,7 +7,7 @@
     <LangVersion>9.0</LangVersion>
     <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
     <CodeAnalysisRuleSet />
-    <Version>2.4.2.5-beta</Version>
+    <Version>2.4.2.5</Version>
     <Authors>懒得勤快</Authors>
     <Description>Masuit.Tools基础公共库</Description>
     <Copyright>懒得勤快,长空X</Copyright>
@@ -20,9 +20,9 @@
     <RepositoryType>Github</RepositoryType>
     <GeneratePackageOnBuild>True</GeneratePackageOnBuild>
     <PackageRequireLicenseAcceptance>False</PackageRequireLicenseAcceptance>
-    <FileVersion>2.4.2.4</FileVersion>
+    <FileVersion>2.4.2.5</FileVersion>
     <Company>masuit.com</Company>
-    <AssemblyVersion>2.4.2.4</AssemblyVersion>
+    <AssemblyVersion>2.4.2.5</AssemblyVersion>
     <PackageLicenseUrl>https://github.com/ldqk/Masuit.Tools/blob/master/LICENSE</PackageLicenseUrl>
     <EmbedUntrackedSources>true</EmbedUntrackedSources>
     <IncludeSymbols>true</IncludeSymbols>

+ 3 - 3
Masuit.Tools.Core/Masuit.Tools.Core.csproj

@@ -20,10 +20,10 @@
         <UserSecretsId>830c282f-f7c1-42be-8651-4cd06ac8e73f</UserSecretsId>
         <RepositoryType>Github</RepositoryType>
         <GeneratePackageOnBuild>True</GeneratePackageOnBuild>
-        <Version>2.4.2.4</Version>
-        <FileVersion>2.4.2.4</FileVersion>
+        <Version>2.4.2.5</Version>
+        <FileVersion>2.4.2.5</FileVersion>
         <Company>masuit.com</Company>
-        <AssemblyVersion>2.4.2.4</AssemblyVersion>
+        <AssemblyVersion>2.4.2.5</AssemblyVersion>
         <Authors>懒得勤快X</Authors>
         <RepositoryUrl>https://github.com/ldqk/Masuit.Tools</RepositoryUrl>
         <EmbedUntrackedSources>true</EmbedUntrackedSources>

BIN
Masuit.Tools/Properties/AssemblyInfo.cs


+ 1 - 1
Masuit.Tools/package.nuspec

@@ -4,7 +4,7 @@
     <!--*-->
     <id>Masuit.Tools.Net</id>
     <!--*-->
-    <version>2.4.2.4</version>
+    <version>2.4.2.5</version>
     <title>Masuit.Tools</title>
     <!--*-->
     <authors>masuit.com</authors>