Browse Source

增加ToPagedListAsync

懒得勤快 4 years ago
parent
commit
eb39099769

+ 1 - 1
Masuit.Tools.Abstractions/Extensions/BaseType/IEnumerableExtensions.cs

@@ -77,7 +77,7 @@ namespace Masuit.Tools
         /// <returns></returns>
         public static Task ForeachAsync<T>(this IEnumerable<T> source, Func<T, Task> action)
         {
-            return ForeachAsync(source, source.Count(), action);
+            return ForAsync(source, (t, _) => action(t));
         }
 
         /// <summary>

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

@@ -7,7 +7,7 @@
     <LangVersion>9.0</LangVersion>
     <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
     <CodeAnalysisRuleSet />
-    <Version>2.4.3</Version>
+    <Version>2.4.3.1</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.3</FileVersion>
+    <FileVersion>2.4.3.1</FileVersion>
     <Company>ldqk.org</Company>
-    <AssemblyVersion>2.4.3</AssemblyVersion>
+    <AssemblyVersion>2.4.3.1</AssemblyVersion>
     <PackageLicenseUrl>https://github.com/ldqk/Masuit.Tools/blob/master/LICENSE</PackageLicenseUrl>
     <EmbedUntrackedSources>true</EmbedUntrackedSources>
     <IncludeSymbols>true</IncludeSymbols>
@@ -45,10 +45,10 @@
 
   <ItemGroup>
     <PackageReference Include="DnsClient" Version="1.4.0" />
-    <PackageReference Include="HtmlAgilityPack" Version="1.11.31" />
+    <PackageReference Include="HtmlAgilityPack" Version="1.11.32" />
     <PackageReference Include="HtmlSanitizer" Version="5.0.376" />
     <PackageReference Include="Microsoft.Win32.Registry" Version="4.7.0" />
-    <PackageReference Include="Newtonsoft.Json" Version="12.0.3" />
+    <PackageReference Include="Newtonsoft.Json" Version="13.0.1" />
     <PackageReference Include="System.ComponentModel.Annotations" Version="4.7.0" />
     <PackageReference Include="System.Diagnostics.PerformanceCounter" Version="4.7.0" />
     <PackageReference Include="System.Management" Version="4.7.0" />

+ 1 - 1
Masuit.Tools.Abstractions/Models/PagedList.cs

@@ -67,7 +67,7 @@ namespace Masuit.Tools.Models
         }
     }
 
-    public static class IQueryableExt
+    public static partial class IQueryableExt
     {
         /// <summary>
         /// 生成分页集合

+ 31 - 11
Masuit.Tools.Abstractions/Systems/HiPerfTimer.cs

@@ -27,11 +27,9 @@ namespace Masuit.Tools.Systems
         {
             _startTime = 0;
             _stopTime = 0;
-
             if (QueryPerformanceFrequency(out _freq) == false)
             {
-                // 不支持高性能计数器 
-                throw new Win32Exception();
+                throw new Win32Exception("不支持高性能计数器");
             }
         }
 
@@ -40,28 +38,38 @@ namespace Masuit.Tools.Systems
         /// </summary>
         public void Start()
         {
-            // 让等待线程工作 
+            // 让等待线程工作 
             Thread.Sleep(0);
             QueryPerformanceCounter(out _startTime);
         }
 
         /// <summary>
-        /// 启动一个新的计时器
+        /// 开始计时器
         /// </summary>
-        /// <returns></returns>
-        public static HiPerfTimer StartNew()
+        public void Restart()
         {
-            HiPerfTimer timer = new HiPerfTimer();
-            timer.Start();
-            return timer;
+            _startTime = 0;
+            Start();
         }
 
         /// <summary>
         /// 停止计时器
         /// </summary>
-        public void Stop()
+        public double Stop()
         {
             QueryPerformanceCounter(out _stopTime);
+            return Duration;
+        }
+
+        /// <summary>
+        /// 启动一个新的计时器
+        /// </summary>
+        /// <returns></returns>
+        public static HiPerfTimer StartNew()
+        {
+            HiPerfTimer timer = new HiPerfTimer();
+            timer.Start();
+            return timer;
         }
 
         /// <summary>
@@ -69,6 +77,18 @@ namespace Masuit.Tools.Systems
         /// </summary>
         public double Duration => (_stopTime - _startTime) / (double)_freq;
 
+        /// <summary>
+        /// 时器经过的总时间
+        /// </summary>
+        public double Elapsed
+        {
+            get
+            {
+                Stop();
+                return Duration;
+            }
+        }
+
         /// <summary>
         /// 执行一个方法并测试执行时间
         /// </summary>

+ 7 - 7
Masuit.Tools.Abstractions/Systems/SnowFlake.cs

@@ -12,21 +12,21 @@ namespace Masuit.Tools.Systems
         #region 私有字段
 
         private static long _machineId; //机器码
-        private static long _datacenterId; //数据ID
+        private static long _dataId; //数据ID
         private static long _sequence; //计数从零开始
         private static long _lastTimestamp = -1L; //最后时间戳
 
         private const long Twepoch = 687888001020L; //唯一时间随机量
 
         private const long MachineIdBits = 5L; //机器码字节数
-        private const long DatacenterIdBits = 5L; //数据字节数
+        private const long DataBits = 5L; //数据字节数
         private const long MaxMachineId = -1L ^ -1L << (int)MachineIdBits; //最大机器码
-        private const long MaxDatacenterId = -1L ^ (-1L << (int)DatacenterIdBits); //最大数据ID
+        private const long MaxDataBitId = -1L ^ (-1L << (int)DataBits); //最大数据字节数
 
         private const long SequenceBits = 12L; //计数器字节数,12个字节用来保存计数码        
         private const long MachineIdShift = SequenceBits; //机器码数据左移位数,就是后面计数器占用的位数
         private const long DatacenterIdShift = SequenceBits + MachineIdBits;
-        private const long TimestampLeftShift = DatacenterIdShift + DatacenterIdBits; //时间戳左移动位数就是机器码+计数器总字节数+数据字节数
+        private const long TimestampLeftShift = DatacenterIdShift + DataBits; //时间戳左移动位数就是机器码+计数器总字节数+数据字节数
         private const long SequenceMask = -1L ^ -1L << (int)SequenceBits; //一毫秒内可以产生计数,如果达到该值则等到下一毫秒在进行生成
 
         private static readonly object SyncRoot = new object(); //加锁对象
@@ -90,12 +90,12 @@ namespace Masuit.Tools.Systems
 
             if (datacenterId >= 0)
             {
-                if (datacenterId > MaxDatacenterId)
+                if (datacenterId > MaxDataBitId)
                 {
                     throw new Exception("数据中心ID非法");
                 }
 
-                _datacenterId = datacenterId;
+                _dataId = datacenterId;
             }
         }
 
@@ -134,7 +134,7 @@ namespace Masuit.Tools.Systems
                 }
 
                 _lastTimestamp = timestamp; //把当前时间戳保存为最后生成ID的时间戳
-                long id = ((timestamp - Twepoch) << (int)TimestampLeftShift) | (_datacenterId << (int)DatacenterIdShift) | (_machineId << (int)MachineIdShift) | _sequence;
+                long id = ((timestamp - Twepoch) << (int)TimestampLeftShift) | (_dataId << (int)DatacenterIdShift) | (_machineId << (int)MachineIdShift) | _sequence;
                 return id;
             }
         }

+ 5 - 5
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.3</Version>
-        <FileVersion>2.4.3</FileVersion>
+        <Version>2.4.3.1</Version>
+        <FileVersion>2.4.3.1</FileVersion>
         <Company>ldqk.org</Company>
-        <AssemblyVersion>2.4.3</AssemblyVersion>
+        <AssemblyVersion>2.4.3.1</AssemblyVersion>
         <Authors>懒得勤快X</Authors>
         <RepositoryUrl>https://github.com/ldqk/Masuit.Tools</RepositoryUrl>
         <EmbedUntrackedSources>true</EmbedUntrackedSources>
@@ -33,14 +33,14 @@
 
     <ItemGroup>
         <PackageReference Include="DnsClient" Version="1.4.0" />
-        <PackageReference Include="HtmlAgilityPack" Version="1.11.31" />
+        <PackageReference Include="HtmlAgilityPack" Version="1.11.32" />
         <PackageReference Include="HtmlSanitizer" Version="5.0.376" />
         <PackageReference Include="Microsoft.AspNetCore.Mvc" Version="2.2.0" />
         <PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="5.0" />
         <PackageReference Include="Microsoft.Extensions.Http" Version="5.0" />
         <PackageReference Include="Microsoft.SourceLink.GitHub" Version="1.0.0" PrivateAssets="All" />
         <PackageReference Include="Microsoft.Win32.Registry" Version="5.0" />
-        <PackageReference Include="Newtonsoft.Json" Version="12.0.3" />
+        <PackageReference Include="Newtonsoft.Json" Version="13.0.1" />
         <PackageReference Include="System.ComponentModel.Annotations" Version="5.0" />
         <PackageReference Include="System.Diagnostics.PerformanceCounter" Version="4.7.0" />
         <PackageReference Include="System.Management" Version="4.7.0" />

+ 36 - 0
Masuit.Tools.Core/Models/IQueryableExt.cs

@@ -0,0 +1,36 @@
+using Masuit.Tools.Models;
+using Microsoft.EntityFrameworkCore;
+using System;
+using System.Linq;
+using System.Threading.Tasks;
+
+namespace Masuit.Tools.Core.Models
+{
+    public static partial class IQueryableExt
+    {
+        /// <summary>
+        /// 生成分页集合
+        /// </summary>
+        /// <typeparam name="T"></typeparam>
+        /// <param name="query"></param>
+        /// <param name="page">当前页</param>
+        /// <param name="size">页大小</param>
+        /// <returns></returns>
+        public static async Task<PagedList<T>> ToPagedListAsync<T>(this IOrderedQueryable<T> query, int page, int size)
+        {
+            var totalCount = await query.CountAsync();
+            if (page * size > totalCount)
+            {
+                page = (int)Math.Ceiling(totalCount / (size * 1.0));
+            }
+
+            if (page <= 0)
+            {
+                page = 1;
+            }
+
+            var list = await query.Skip(size * (page - 1)).Take(size).ToListAsync();
+            return new PagedList<T>(list, page, size, totalCount);
+        }
+    }
+}

+ 3 - 3
Masuit.Tools.NoSQL.MongoDBClient/Masuit.Tools.NoSQL.MongoDBClient.csproj

@@ -38,9 +38,9 @@
   </PropertyGroup>
 
   <ItemGroup>
-    <PackageReference Include="MongoDB.Bson" Version="2.12.0" />
-    <PackageReference Include="MongoDB.Driver" Version="2.12.0" />
-    <PackageReference Include="MongoDB.Driver.Core" Version="2.12.0" />
+    <PackageReference Include="MongoDB.Bson" Version="2.12.1" />
+    <PackageReference Include="MongoDB.Driver" Version="2.12.1" />
+    <PackageReference Include="MongoDB.Driver.Core" Version="2.12.1" />
   </ItemGroup>
 
 </Project>

+ 2 - 2
Masuit.Tools/Masuit.Tools.csproj

@@ -405,7 +405,7 @@
       <Version>1.4.0</Version>
     </PackageReference>
     <PackageReference Include="HtmlAgilityPack">
-      <Version>1.11.31</Version>
+      <Version>1.11.32</Version>
     </PackageReference>
     <PackageReference Include="HtmlSanitizer">
       <Version>5.0.376</Version>
@@ -414,7 +414,7 @@
       <Version>5.2.7</Version>
     </PackageReference>
     <PackageReference Include="Newtonsoft.Json">
-      <Version>12.0.3</Version>
+      <Version>13.0.1</Version>
     </PackageReference>
     <PackageReference Include="SharpCompress">
       <Version>0.28.1</Version>

BIN
Masuit.Tools/Properties/AssemblyInfo.cs


+ 1 - 1
Masuit.Tools/package.nuspec

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

+ 1 - 1
Test/Masuit.Tools.AspNetCore.ResumeFileResults.WebTest/Masuit.Tools.AspNetCore.ResumeFileResults.WebTest.csproj

@@ -23,7 +23,7 @@
   </ItemGroup>
 
   <ItemGroup>
-    <PackageReference Include="Swashbuckle.AspNetCore" Version="6.1.0" />
+    <PackageReference Include="Swashbuckle.AspNetCore" Version="6.1.1" />
   </ItemGroup>
 
   <ItemGroup>