[NewLife.XCode]增删改查入门

NewLife.XCode是一个有10多年历史的开源数据中间件,由新生命团队(2002~2019)开发完成并维护至今,以下简称XCode。

整个系列教程会大量结合示例代码和运行日志来进行深入分析,蕴含多年开发经验于其中。

开源地址:https://github.com/NewLifeX/X

回到目录

增删改查入门

新建控制台项目(.NET Core),从nuget引用NewLife.XCode,(也可以从别的项目引用下载后拷贝XCode.dll和NewLife.Core.dll来使用,区分nfx和netcore版本),敲入以下代码

640?wx_fmt=gif

// 启用控制台日志
XTrace.UseConsole();

// 添加
var user = new UserX
{
Name
= "大石头",
Enable
= true
};
user.Insert();
// 自增字段user.ID已经取得值
XTrace.WriteLine("用户ID:{0}", user.ID);

// 查询
var user2 = UserX.Find(UserX._.Name == "大石头");

// 更新
user2.Logins++;
user2.LastLogin
= DateTime.Now;
user2.Update();

// 删除
var user3 = UserX.FindByID(user.ID);
user3.Delete();

Console.ReadLine();

640?wx_fmt=gif

先跑起来看看效果:

640?wx_fmt=gif

#Software: ConsoleApp4
#ProcessID:
21252 x64
#AppDomain: ConsoleApp4
#FileName: C:\Program Files\dotnet\dotnet.exe
#BaseDirectory: D:\Test\ConsoleApp4\ConsoleApp4\bin\Debug\netcoreapp2.
1\
#CommandLine: D:\Test\ConsoleApp4\ConsoleApp4\bin\Debug\netcoreapp2.
1\ConsoleApp4.dll
#ApplicationType: Console
#CLR:
4.0.30319.42000,
#OS: Microsoft Windows NT
6.2.9200.0, X3/Stone
#CPU:
8
#GC: IsServerGC
=False, LatencyMode=Interactive
#Date:
2019-02-25
#字段: 时间 线程ID 线程池Y网页W普通N 线程名 消息内容
#Fields: Time ThreadID IsPoolThread ThreadName Message
22:57:13.089 1 N - NewLife.Core v8.0.2019.0101 Build 2019-01-26 23:22:36
22:57:13.104 1 N - 新生命X组件核心库 ©2002-2019 新生命开发团队
22:57:13.114 1 N - ConsoleApp4 v1.0.0.0 Build 2000-01-01
22:57:13.115 1 N - ConsoleApp4
22:57:13.115 1 N - Setting的配置文件Config\Core.config 不存在,准备用默认配置覆盖!
22:57:13.277 1 N - Setting的配置文件Config\XCode.config 不存在,准备用默认配置覆盖!
22:57:13.282 1 N - XCode v9.10.2019.0101 Build 2019-01-26 23:22:38
22:57:13.282 1 N - 数据中间件 ©2002-2019 新生命开发团队
22:57:13.628 1 N - 自动为[Membership]设置SQLite连接字符串:Data Source=.\Membership.db;Migration=On
22:57:13.652 1 N - System.Data.SQLite.dll不存在或平台版本不正确,准备联网获取 http://x.newlifex.com/
22:57:13.835 1 N - 下载链接 http://x.newlifex.com/,目标 System.Data.SQLite.win-x64,System.Data.SQLite.win,System.Data.SQLite.st,System.Data.SQLite
22:57:13.964 4 Y 1 WebClientX.Get http://x.newlifex.com/
22:57:15.660 1 N - 分析得到文件 System.Data.SQLite.win-x64_20180823112512.zip,准备下载 http://x.newlifex.com/System.Data.SQLite.win-x64_20180823112512.zip
22:57:15.663 4 Y 19 WebClientX.Get http://x.newlifex.com/System.Data.SQLite.win-x64_20180823112512.zip
22:57:16.897 1 N - 下载完成,共924,475字节,耗时1,232毫秒
22:57:16.897 1 N - 解压缩到 D:\Test\ConsoleApp4\ConsoleApp4\bin\Debug\netcoreapp2.1\Plugins
22:57:17.074 1 N - TypeX.GetType("System.Data.SQLite.SQLiteFactory") => Plugins\System.Data.SQLite.dll
22:57:17.074 1 N - System.Data.SQLite驱动D:\Test\ConsoleApp4\ConsoleApp4\bin\Debug\netcoreapp2.1\Plugins\System.Data.SQLite.dll 版本v1.0.109.0
22:57:17.145 1 N - Data Source=D:\Test\ConsoleApp4\ConsoleApp4\bin\Debug\netcoreapp2.1\Membership.db;Cache Size=-524288;Synchronous=Off;Journal Mode=WAL
22:57:17.154 4 Y 198 检查实体XCode.Membership.UserX的数据表架构,模式:CheckTableWhenFirstUse
22:57:17.160 4 Y 198 创建数据库:Membership
22:57:17.161 4 Y 198 创建数据库:D:\Test\ConsoleApp4\ConsoleApp4\bin\Debug\netcoreapp2.1\Membership.db
22:57:17.181 4 Y 198 select * from sqlite_master
22:57:17.284 4 Y 198 创建表:User(用户)
22:57:17.298 4 Y 198 Create Table User(
ID
integer Primary Key AUTOINCREMENT,
Name
nvarchar(50) NOT NULL COLLATE NOCASE,
Password
nvarchar(50) NULL COLLATE NOCASE,
DisplayName
nvarchar(50) NULL COLLATE NOCASE,
Sex
int NOT NULL,
Mail
nvarchar(50) NULL COLLATE NOCASE,
Mobile
nvarchar(50) NULL COLLATE NOCASE,
Code
nvarchar(50) NULL COLLATE NOCASE,
Avatar
nvarchar(200) NULL COLLATE NOCASE,
RoleID
int NOT NULL,
RoleIDs
nvarchar(200) NULL COLLATE NOCASE,
DepartmentID
int NOT NULL,
Online
bit NOT NULL,
Enab...etime
NULL,
LastLoginIP
nvarchar(50) NULL COLLATE NOCASE,
RegisterTime
datetime NULL,
RegisterIP
nvarchar(50) NULL COLLATE NOCASE,
Ex1
int NOT NULL,
Ex2
int NOT NULL,
Ex3
real NOT NULL,
Ex4
nvarchar(50) NULL COLLATE NOCASE,
Ex5
nvarchar(50) NULL COLLATE NOCASE,
Ex6
nvarchar(50) NULL COLLATE NOCASE,
UpdateUser
nvarchar(50) NULL COLLATE NOCASE,
UpdateUserID
int NOT NULL,
UpdateIP
nvarchar(50) NULL COLLATE NOCASE,
UpdateTime
datetime NULL,
Remark
nvarchar(200) NULL COLLATE NOCASE
)
22:57:17.309 4 Y 198 Create Unique Index IU_User_Name On User (Name)
22:57:17.311 4 Y 198 Create Index IX_User_RoleID On User (RoleID)
22:57:17.312 4 Y 198 Create Index IX_User_UpdateTime On User (UpdateTime)
22:57:17.320 4 Y 198 UserX.Count 快速计算表记录数(非精确)[User/Membership] 参考值 -2
22:57:17.332 4 Y 198 开始检查连接[Membership/SQLite]的数据库架构……
22:57:17.355 4 Y 198 [Membership]的所有实体类(5个):Parameter,UserX,Menu,Role,Department
22:57:17.356 4 Y 198 [Membership]需要检查架构的实体类(1个):Parameter
22:57:17.357 4 Y 198 Membership待检查表架构的实体个数:1
22:57:17.358 4 Y 198 select * from sqlite_master
22:57:17.365 4 Y 198 创建表:Parameter(字典参数)
22:57:17.368 4 Y 198 Create Table Parameter(
ID
integer Primary Key AUTOINCREMENT,
Category
nvarchar(50) NULL COLLATE NOCASE,
Name
nvarchar(50) NULL COLLATE NOCASE,
Value
nvarchar(200) NULL COLLATE NOCASE,
LongValue
nvarchar(2000) NULL COLLATE NOCASE,
Kind
int NOT NULL,
Enable
bit NOT NULL,
Ex1
int NOT NULL,
Ex2
int NOT NULL,
Ex3
real NOT NULL,
Ex4
nvarchar(50) NULL COLLATE NOCASE,
Ex5
nvarchar(50) NULL COLLATE NOCASE,
Ex6
nvarchar(50) NULL COLLATE NOCASE,
CreateUser
nvarchar(50) NULL COLLATE NOCASE,
CreateUserID
int NOT NULL,
CreateIP
nvarchar(50) NULL COLLATE NOCASE,
CreateTime
datetime NULL,
UpdateUser
nvarchar(50) NULL COLLATE NOCASE,
UpdateUserID
int NOT NULL,
UpdateIP
nvarchar(50) NULL COLLATE NOCASE,
UpdateTime
datetime NULL,
Remark
nvarchar(200) NULL COLLATE NOCASE
)
22:57:17.369 4 Y 198 Create Unique Index IU_Parameter_Category_Name On Parameter (Category, Name)
22:57:17.370 4 Y 198 Create Index IX_Parameter_Name On Parameter (Name)
22:57:17.370 4 Y 198 Create Index IX_Parameter_UpdateTime On Parameter (UpdateTime)
22:57:17.372 4 Y 198 检查连接[Membership/SQLite]的数据库架构耗时38ms
22:57:17.383 4 Y 198 Select * From User Order By ID Desc limit 1
22:57:17.388 4 Y 198 Select Count(*) From User
22:57:17.398 4 Y 198 Select Count(*) From User
22:57:17.401 4 Y 198 开始初始化UserX用户数据……
22:57:17.455 4 Y 198 Insert Into User(Name, Password, DisplayName, Sex, Mail, Mobile, Code, Avatar, RoleID, RoleIDs, DepartmentID, Online, Enable, Logins, LastLogin, LastLoginIP, RegisterTime, RegisterIP, Ex1, Ex2, Ex3, Ex4, Ex5, Ex6, UpdateUser, UpdateUserID, UpdateIP, UpdateTime, Remark) Values('admin', '21232F297A57A5A743894A0E4A801FC3', '管理员', 0, null, null, null, null, 1, '', 0, 0, 1, 0, null, null, null, null, 0, 0, 0, null, null, null, null, 0, null, null, null);Select last_insert_rowid() newid
22:57:17.479 4 Y 198 自动为[Log]设置SQLite连接字符串:Data Source=.\Log.db;Migration=On
22:57:17.491 4 Y 198 Data Source=D:\Test\ConsoleApp4\ConsoleApp4\bin\Debug\netcoreapp2.1\Log.db;Cache Size=-524288;Synchronous=Off;Journal Mode=WAL
22:57:17.514 4 Y 198 完成初始化UserX用户数据!
22:57:17.548 1 N - Insert Into User(Name, Password, DisplayName, Sex, Mail, Mobile, Code, Avatar, RoleID, RoleIDs, DepartmentID, Online, Enable, Logins, LastLogin, LastLoginIP, RegisterTime, RegisterIP, Ex1, Ex2, Ex3, Ex4, Ex5, Ex6, UpdateUser, UpdateUserID, UpdateIP, UpdateTime, Remark) Values('大石头', null, null, 0, null, null, null, null, 0, null, 0, 0, 1, 0, null, null, null, null, 0, 0, 0, null, null, null, null, 0, null, null, null);Select last_insert_rowid() newid
22:57:17.561 1 N - 用户ID:2
22:57:17.574 1 N - Select * From User Where Name='大石头' Order By ID Desc limit 1
22:57:17.601 1 N - Update User Set Logins=Logins+1, LastLogin='2019-02-25 22:57:17' Where ID=2
22:57:17.613 1 N - Select * From User Order By ID Desc
22:57:17.620 1 N - Delete From User Where ID=2
22:57:18.519 6 Y 199 检查实体XCode.Membership.Log的数据表架构,模式:CheckTableWhenFirstUse
22:57:18.520 6 Y 199 创建数据库:Log
22:57:18.521 6 Y 199 创建数据库:D:\Test\ConsoleApp4\ConsoleApp4\bin\Debug\netcoreapp2.1\Log.db
22:57:18.532 6 Y 199 创建表:Log(日志)
22:57:18.537 4 Y EQ 开始检查连接[Log/SQLite]的数据库架构……
22:57:18.555 4 Y EQ [Log]的所有实体类(3个):Log,UserOnline,VisitStat
22:57:18.555 4 Y EQ [Log]需要检查架构的实体类(2个):UserOnline,VisitStat
22:57:18.558 4 Y EQ Log待检查表架构的实体个数:2
22:57:18.559 4 Y EQ 创建表:UserOnline(用户在线)
22:57:18.561 4 Y EQ 创建表:VisitStat(访问统计)
22:57:18.564 4 Y EQ 检查连接[Log/SQLite]的数据库架构耗时24ms

640?wx_fmt=gif

 

这是前述代码的完整执行日志,这里我们不做过多分析。

日志大意是:自动配置SQLite数据库,下载平台要求的SQLite驱动,建库建表,增删改查

这里特别需要关注的是这几行:

640?wx_fmt=gif

22:57:17.548  1 N - Insert Into User(Name, Password, DisplayName, Sex, Mail, Mobile, Code, Avatar, RoleID, RoleIDs, DepartmentID, Online, Enable, Logins, LastLogin, LastLoginIP, RegisterTime, RegisterIP, Ex1, Ex2, Ex3, Ex4, Ex5, Ex6, UpdateUser, UpdateUserID, UpdateIP, UpdateTime, Remark) Values('大石头', null, null, 0, null, null, null, null, 0, null, 0, 0, 1, 0, null, null, null, null, 0, 0, 0, null, null, null, null, 0, null, null, null);Select last_insert_rowid() newid
22:57:17.561 1 N - 用户ID:2
22:57:17.574 1 N - Select * From User Where Name='大石头' Order By ID Desc limit 1
22:57:17.601 1 N - Update User Set Logins=Logins+1, LastLogin='2019-02-25 22:57:17' Where ID=2
22:57:17.613 1 N - Select * From User Order By ID Desc
22:57:17.620 1 N - Delete From User Where ID=2

640?wx_fmt=gif

 

 一句user.Insert,生成了一个Insert Into语句,并取得自增字段赋值给ID。

一个简单的Find单字段查找,通过user2.Update更新了两个字段,user3.Delete则删除了这行数据。

这就是一个完成的增删改查!

 

短短的一段代码,也许带给你许多疑问,这些疑问都将在后续文章中得到详细解答:

  • UserX类来自哪里?(XCode内置权限体系Membership)

  • 为何不需要配置数据库?(无配置时默认使用SQLite)

  • 下载了什么东西?(SQLite驱动分为.Net2.0/.Net4.0/.Net4.5等,还有.netstandard以及Linux版本之分,XCode根据平台自动下载正确版本)

  • 为何会自动建表?(这是XCode最为强大的反向工程,2008年开始支持,类似于EF后来的数据迁移)

  • 自增ID。Insert后会即刻取回新插入的自增值

  • Logins=Logins+1。这叫做累加字段

  • UserX.FindByID为何生成不带where的Select查询?(UserX.FindByID内部带有实体缓存,并非简单的Find(ID==2))

 

回到目录

系列教程

NewLife.XCode教程系列[2019版]

  1. 增删改查入门。快速展现用法,代码配置连接字符串

  2. 数据模型文件。建立表格字段和索引,名字以及数据类型规范,推荐字段(时间,用户,IP)

  3. 实体类结构。数据类业务类,泛型基类,接口

  4. 功能设置。连接字符串,调试开关,SQL日志,慢日志,参数化,执行超时。代码与配置文件设置,连接字符串局部设置

  5. 反向工程。自动建立数据库数据表

  6. 数据初始化。InitData写入初始化数据

  7. 高级增删改。重载拦截,自增字段,Valid验证,实体模型(时间,用户,IP)

  8. 脏数据。如何产生,怎么利用

  9. 增量累加。高并发统计

  10. 事务处理。单表和多表,不同连接,多种写法

  11. 扩展属性。多表关联,Map映射

  12. 高级查询。复杂条件,分页,自定义扩展FieldItem,查总记录数,查汇总统计

  13. 数据层缓存。Sql缓存,更新机制

  14. 实体缓存。全表整理缓存,更新机制

  15. 对象缓存。字典缓存,适用用户等数据较多场景。

  16. 百亿级性能。字段精炼,索引完备,合理查询,充分利用缓存

  17. 实体工厂。元数据,通用处理程序

  18. 角色权限。Membership

  19. 导入导出。Xml,Json,二进制,网络或文件

  20. 分表分库。常见拆分逻辑

  21. 高级统计。聚合统计,分组统计

  22. 批量写入。批量插入,批量Upsert,异步保存

  23. 实体队列。写入级缓存,提升性能。

  24. 备份同步。备份数据,恢复数据,同步数据

  25. 数据服务。提供RPC接口服务,远程执行查询,例如SQLite网络版

  26. 大数据分析。ETL抽取,调度计算处理,结果持久化

 

End.


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/316654.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

P5472 [NOI2019] 斗主地(期望、数学)

前言 我咋连表都没打啊。 too vegetable。 解析 题目给出的洗牌形式看着并不好看,合理猜测可以发现,这其实就等价于所有可能情况等概率出现。 然后就不会了 打表可以发现:当 tp1 时,dp 数组是一个等差数列。当 tp2 时&#xff…

[HNOI2012]集合选数(思维构造 + 状压dp)

problem 题目链接 solution 从最小一个数 xxx 开始,将其 2x,3x2x,3x2x,3x 放入,再将 2(2x),3(2x),2(3x),3(3x)2(2x),3(2x),2(3x),3(3x)2(2x),3(2x),2(3x),3(3x) 放入,以此类推 …\dots… 将其合并为一个集合。重复又找一个最小未进入集合的…

在实际项目中使用LiteDB NoSQL数据库

LiteDB 是一个 NoSQL 数据库,特点是 MongoDB like 和 0 配置。100% 原汁原味的 C# 开发, Release 只有一个 DLL,官方有一下适用场景:移动App,桌面小应用程序,特有的文件格式,小型的 Web 应用,需…

2021牛客暑期多校训练营3

2021牛客暑期多校训练营3 题号题目知识点AGuess and liesBBlack and whiteCMinimum grid二分图匹配DCountEMath数论打表找规律F24dian模拟GYu Ling(Ling YueZheng) and Colorful TreeHLing Qiu, Luna and Triple BackpackIKuriyama Mirai and Exclusive OrJCounting Triangles…

P4769 [NOI2018] 冒泡排序(组合数学)

前言 这里是线性做法。 在题解里几句话说清楚的性质愣是推了一上午。 too vegetable 解析 考虑怎样的排列是不合法的。 一个排列如果不合法,也就是在某次交换时其中一个元素距离目标的距离没有减少反而增大了,那么以后这个数一定会再换回来&#xff0…

[骗分技巧——随机化Ⅰ]CodeChef-Milestones,CF364D-Ghd

文章目录CodeChef-MilestonesproblemsolutioncodeCF364D-Ghdproblemsolutioncode设随机化一次的正确率为 ppp,一次的复杂度为 O(f(n))O(f(n))O(f(n))。则随机的期望次数 kkk:k∑i1∞p(1−p)i−1i(1)(1−p)k∑i1∞p(1−p)ii∑i2∞p(1−p)i−1(i−1)(2)(1)…

初探奥尔良(Orleans)

由于工作上关系目前经常被各种并发数据问题搞得焦头烂额,要么要性能舍弃数据上得一致性,要么要一致性但是却得到了特别糟糕的响应。难道鱼和熊掌真的无法兼得吗?然后找到了类似奥尔良这种基于Actor模型的kuangjia首先本人因为是C#系的所以暂不…

2021杭电多校1

题号题目知识点AMod, Or and Everything思维数论BRocket landCPuzzle loopDAnother thief in a ShopEMinimum spanning tree推结论欧拉筛FXor sum01字典树GPass!HMaximal submatrix单调栈IKD-GraphJzotoKNecklace of Beads

P4775 [NOI2018] 情报中心(线段树合并)

前言 似乎也没有那么难? 但确实也不太好想。 解析 对于两条有交路径 (u1,v1,c1),(u2,v2,c2)(u_1,v_1,c_1),(u_2,v_2,c_2)(u1​,v1​,c1​),(u2​,v2​,c2​),设 tlca(u1,u1)tlca(u_1,u_1)tlca(u1​,u1​) 为四个 lca 中最深的,那么代价的二…

[骗分技巧——随机化Ⅱ] [Poi2014]Couriers,CodeChef - TKCONVEX

文章目录[Poi2014]CouriersproblemsolutioncodeCodeChef - TKCONVEXproblemsolutioncode随机算法的典型套路:枚举太花时,转化为随机一个数。然后通过对正确率的分析,选择一个随机的次数来卡。前提是要保证每一次检验随机是否为答案的时间复杂…

[NewLife.XCode]功能设置

NewLife.XCode是一个有10多年历史的开源数据中间件,由新生命团队(2002~2019)开发完成并维护至今,以下简称XCode。整个系列教程会大量结合示例代码和运行日志来进行深入分析,蕴含多年开发经验于其中,代表作有百亿级大数据实时计算项…

I love max and multiply HDU - 6971(详细解答)

I love max and multiply HDU - 6971 题意: 数组a和b,现在构造一个数组c,使得c[k]max(a[i] * b[j]) , i&j>k 求数组c的和 题解: 我们可以考虑求出所有Dkmax(Ai * Bj)并满足i&jk,然后再从后向前取&#…

[NewLife.XCode]数据模型文件

NewLife.XCode是一个有10多年历史的开源数据中间件,由新生命团队(2002~2019)开发完成并维护至今,以下简称XCode。整个系列教程会大量结合示例代码和运行日志来进行深入分析,蕴含多年开发经验于其中。开源地址:https://github.com/…

[HNOI2013]数列(差分)

[HNOI2013]数列 problem 洛谷链接 solution 假设每天的股价为 a[i]a[i]a[i]。则需满足 ∀i<ka[i1]−a[i]≤m\forall_{i<k}a[i1]-a[i]\le m∀i<k​a[i1]−a[i]≤m。又有参数满足 m(k−1)<nm(k-1)<nm(k−1)<n。 也就是说每天的股价都可以取到上限&#xf…

24dian(牛客多校第三场)

24dian(牛客多校第三场) 题意&#xff1a; 给你n张牌&#xff0c;每张牌的大小为1 ~ 13&#xff0c;问这些牌与加减乘除任意组合(可以使用括号)&#xff0c;且但所有的有效解在计算过程中都涉及到分数&#xff0c;即非整数&#xff0c;能否组成答案m&#xff0c;如果可以&…

[NewLife.XCode]高级增删改

NewLife.XCode是一个有10多年历史的开源数据中间件&#xff0c;支持nfx/netstandard&#xff0c;由新生命团队(2002~2019)开发完成并维护至今&#xff0c;以下简称XCode。整个系列教程会大量结合示例代码和运行日志来进行深入分析&#xff0c;蕴含多年开发经验于其中&#xff0…

[AtCoder Grand Contest 048] D - Pocky Game(区间dp + 博弈)

problem AtCoder solution 注意&#xff1a;本题不是平等博弈&#xff0c;因为先手只能取最左边&#xff0c;后手只能取最右边。 设 f[l][r][k]:f[l][r][k]:f[l][r][k]: 只剩下区间 [l,r][l,r][l,r] 等待操作&#xff0c;第 lll 堆石子数量为 kkk 的时候&#xff0c;先手是…

P4147 玉蟾宫

P4147 玉蟾宫 题意&#xff1a; 给你一个n * m的矩阵&#xff0c;矩阵每个值有F或R&#xff0c;求最大的全为F的矩阵&#xff0c;输出面积 * 3 题解&#xff1a; 很明显&#xff0c;求最大01矩阵&#xff0c;悬线法或者单调栈 对于模板除了要记熟还要知道原理&#xff0c;不…

[NewLife.XCode]数据初始化

NewLife.XCode是一个有10多年历史的开源数据中间件&#xff0c;支持nfx/netstandard&#xff0c;由新生命团队(2002~2019)开发完成并维护至今&#xff0c;以下简称XCode。整个系列教程会大量结合示例代码和运行日志来进行深入分析&#xff0c;蕴含多年开发经验于其中&#xff0…

I love counting HDU - 6964

I love counting HDU - 6964 题意&#xff1a; 一个数组c&#xff0c;给你了(l,r)一个范围&#xff0c;问这个范围内满足ci ^ a < b数量的有多少&#xff1f; 题解&#xff1a; 我第一反应是莫队&#xff0c;直接莫队得到结果&#xff0c;但是发现样例不对&#xff0c;再…