国产亚洲精品福利在线无卡一,国产精久久一区二区三区,亚洲精品无码国模,精品久久久久久无码专区不卡

當前位置: 首頁 > news >正文

上海網(wǎng)站制作上海網(wǎng)站制作重慶森林壁紙

上海網(wǎng)站制作上海網(wǎng)站制作,重慶森林壁紙,為什么做電商網(wǎng)站,音樂外鏈生成網(wǎng)站怎么做.NET開源 ORM 框架 SqlSugar 系列 【開篇】.NET開源 ORM 框架 SqlSugar 系列【入門必看】.NET開源 ORM 框架 SqlSugar 系列【實體配置】.NET開源 ORM 框架 SqlSugar 系列【Db First】.NET開源 ORM 框架 SqlSugar 系列【Code First】.NET開源 ORM 框架 SqlSugar 系列【數(shù)據(jù)事務(wù)…

????.NET開源 ORM 框架 SqlSugar 系列

  1. 【開篇】.NET開源 ORM 框架 SqlSugar 系列
  2. 【入門必看】.NET開源 ORM 框架 SqlSugar 系列
  3. 【實體配置】.NET開源 ORM 框架 SqlSugar 系列
  4. 【Db First】.NET開源 ORM 框架 SqlSugar 系列
  5. 【Code First】.NET開源 ORM 框架 SqlSugar 系列
  6. 【數(shù)據(jù)事務(wù)】.NET開源 ORM 框架 SqlSugar 系列
  7. 【連接池】.NET開源 ORM 框架 SqlSugar 系列
  8. 【查詢目錄】.NET開源 ORM 框架 SqlSugar 系列
  9. 【查詢基礎(chǔ)】.NET開源 ORM 框架 SqlSugar 系列
  10. 【排序用法】.NET開源 ORM 框架 SqlSugar 系列
  11. 【分組去重】.NET開源 ORM 框架 SqlSugar 系列
  12. 【聯(lián)表查詢】.NET開源 ORM 框架 SqlSugar 系列
  13. 【導航查詢】.NET開源 ORM 框架 SqlSugar 系列
  14. 【子查詢】.NET開源 ORM 框架 SqlSugar 系列
  15. 【嵌套查詢】.NET開源 ORM 框架 SqlSugar 系列

💦萬丈高樓平地起,做開發(fā)想要技術(shù)精進,必須要有扎實的基礎(chǔ)功底?;A(chǔ)SQL查詢語法一定要牢記于心,才能應(yīng)對后面更為復雜的形勢。

💥SqlSugar 在子查詢上支持是非常強大,比如 子查詢進行聯(lián)表、INNOT INSELECT 一列等 。

1、基礎(chǔ)教程?🎀

?1.1 API目錄

/***只查一列***/
//First: select top 1 id
SqlFunc.Subqueryable<School>().Where(s => s.Id == st.Id).Select(s => s.Id)     
//max例1: 
SqlFunc.Subqueryable<School>().Where(s => s.Id == st.Id).Max(s => s.Id)
//max例2: 
SqlFunc.Subqueryable<School>()..Where(s=>s.Id==st.Id).Select(s=>SqlFunc.AggregateMax(s.Id))      
//min:
SqlFunc.Subqueryable<School>().Where(s => s.Id == st.Id).Min(s => s.Id)
//avg:
SqlFunc.Subqueryable<School>().Where(s => s.Id == st.Id).Avg(s => s.Id)
//count:
SqlFunc.Subqueryable<School>().Where(s => s.Id == st.Id).Count()
//sum:
SqlFunc.Subqueryable<School>().Where(s => s.Id == st.Id).Sum(s => s.num)
//去重后匯總數(shù)量
SqlFunc.Subqueryable<School>().Where(s => z.Id == st.Id).Select(s=>SqlFunc.AggregateDistinctCount(s.Name))
//逗號分割列 
SqlFunc.Subqueryable<Order>().Where(z=>z.Id==it.Id).SelectStringJoin(z => z.Name, ",")
//完整用例:看標題8/***返回List或者實體***/
新功能:5.1.3.36
//SqlFunc.Subqueryable<Custom>().Where(c => c.Id == it.CustomId).ToList()
//SqlFunc.Subqueryable<Custom>().Where(c => c.Id == it.CustomId).ToList(it=>new Class(){ Name=it.Name})
//更多看標題4/***返回單個實體***/
//SqlFunc.Subqueryable<Custom>().Where(c => c.Id == it.CustomId).First() 
//更多看標題9/***IN、Not in、Exists、Not Exists***/
//看標題2

1.2 where 中使用

var getAll = db.Queryable<Student, School>((st, sc) => new JoinQueryInfos(JoinType.Left,st.Id==sc.Id) )
.Where(st => st.Id == SqlFunc.Subqueryable<School>().Where(s => s.Id == st.Id).Select(s => s.Id))
.ToList();/*生成的MYSQL語句,如果是SqlServer就是TOP 1
SELECT `st`.`ID`,`st`.`SchoolId`,`st`.`Name`,`st`.`CreateTime` FROM `STudent` st Left JOIN `School` sc ON ( `st`.`ID` = `sc`.`Id` )  WHERE ( `st`.`ID` =(SELECT `Id` FROM `School` WHERE ( `Id` = `st`.`ID` ) limit 0,1))
*/

1.3 在 select 中使用

2、IN和NOT IN的操作?🎀

?2.1 Exists?

?Exists in 區(qū)別在于?Exists 擴展性更強,支持多個字段 (簡單的說 In 能實現(xiàn)的 Exists 都能實現(xiàn))


//等同于IN
var getAll7 = db.Queryable<Student>()
.Where(it => SqlFunc.Subqueryable<School>().Where(s =>s.Id==it.Id).Any()).ToList();/*生成的SQL(等于同于it.id in(select id from school)只是寫法不一樣
SELECT `ID`,`SchoolId`,`Name`,`CreateTime` FROM `STudent` it 
WHERE (EXISTS ( SELECT * FROM `School` WHERE ( `Id` = `it`.`ID` ) )) 
*///等同于NOT IN
var getAll8 = db.Queryable<Student>().Where(it => 
SqlFunc.Subqueryable<School>().Where(s => s.Id == it.Id).NotAny()).ToList();/*生成的SQL
SELECT `ID`,`SchoolId`,`Name`,`CreateTime` FROM `STudent` it  
WHERE (NOT EXISTS ( SELECT * FROM `School` WHERE ( `Id` = `it`.`ID` ) ))
*///搜索關(guān)鍵詞:exits

2.2 In 和 Not In (5.0.7.5)??

在有 GroupBy 的情況下==自動轉(zhuǎn)成? in?

db.Queryable<Order>()
.Where(it=>it.Id==SqlFunc.Subqueryable<Custom>().GroupBy(z=>z.OrderId).Select(z=>z.OrderId)).ToList()//Sql
//SELECT [Id],[Name] FROM [Order]  
// WHERE  [Id] in ((SELECT [OrderId] FROM [Custom] GROUP BY [OrderId]))

2.3 分頁In

db.Queryable<Order>().In(it=>it.Id,db.Queryable<Order>().Skip(1).Take(100).Select(it=>it.Id)).ToList();

3、子查詢中使用Sql?🎀

最新版本才支持

 string sql=" (select top 1 id from [Order] ) ";var list = db.Queryable<Order>().Select(it => new{name=it.Name,customName= SqlFunc.MappingColumn<string>(sql)//老版本MappingColumn(default(string),sql) }).ToList();//如果存在SQL拼接將SQL提取到外面在傳進來,有些VS拼接會有問題

Sql代碼如下:

SELECT  [Name] AS [name] , (select top 1 id from [Order] ) AS [customName] FROM [Order]

4、ToList()集合對象?🎀

方式1:簡單方式(5.1.3.38)

直接在 Select 中進行?ToList? ,

性能:? ?大于循環(huán)數(shù)倍? ,大部分情況性能小于ThenMapper方式和導航 ,寫法簡單性能也說的過去

//請升級到 5.1.3.36+ db.Queryable<Order>().Select(it => new{CustomId = it.CustomId,OrderId = it.Id,OrderName = it.Name,CustomList = SqlFunc.Subqueryable<Custom>().Where(c => c.Id == it.CustomId).ToList()}).ToList();//也可以DTOSqlFunc.Subqueryable<Custom>().Where(c=> c.Id == it.CustomId).ToList(c=> new Class(){ Name=c.Name}) //轉(zhuǎn)成DTO//注意:where  ToList里面 c 的別名要一致//只查List<string>這種集合 
SqlFunc.Subqueryable<Custom>().Where(c => c.Id == it.CustomId).ToList(c=>c.Name)//最新版本//自動DTO 5.1.4.70
SqlFunc.Subqueryable<Custom>().Where(c => c.Id == it.CustomId).ToList<DTO>()
SqlFunc.Subqueryable<Custom>().Where(c => c.Id == it.CustomId).ToList(it=>new DTO(){},true);//和Queryable類似

方式2:性能、功能、跨庫

該功能在同類框架中性能比較好不會生成垃圾SQL ,?在現(xiàn)有結(jié)果進行一對多操作

var treeRoot=db.Queryable<Tree>().ToList();//可以聯(lián)表查詢,只要返回List中有關(guān)聯(lián)字段就可以//填充子對象 
//原理: 數(shù)據(jù)庫一次讀取 In (list[0].id,list[1].id,list[2].id...) 內(nèi)存分配到對應(yīng)Child
//所以無論集合多少條記錄  ThenMapper 只會操作一次庫  
db.ThenMapper(treeRoot, item =>{   //用例1:簡單填充  //參數(shù)解釋:子表的ParentId和主表的Id 進行關(guān)聯(lián)查詢(有Select寫到SetContext前面)//可以額外加Where寫SetContext前面,但是不能帶有item對象,item要寫SetContext里面item.Child = db.Queryable<Tree>().SetContext(x => x.ParentId, () => item.Id, item).ToList();//用例2:可以多屬性//item.Child=xxxx//item.Parent=xxxx//用例3:類型轉(zhuǎn)換類轉(zhuǎn)成DTO (注意:Select中的關(guān)聯(lián)字段要賦值)//item.Child = db.Queryable<Tree>()//         .Select(it=>new ViewTree(){ParentId=x.ParentId,Id=i.Id,Name=it.Name }) //         .SetContext(x => x.ParentId, () => item.Id, item).ToList();//用例4:聯(lián)表填充//item.Child=db.Queryable<Tree>()//.LeftJoin<Tree>((i,y)=>i.ParentId==y.Id)//.Select((i,y)=>new viewmodel(){ Parentid=i.Parentid..........})//.SetContext(x => x.ParentId, () => item.Id, item).ToList();});//異步
var treeRoot=await db.Queryable<Tree>().ToListAsync(); 
await db.ThenMapperAsync(treeRoot, async item =>
{   //給集合賦值  參數(shù)解釋  子表的ParentId和主表的Id 進行關(guān)聯(lián)查詢item.Child =await db.Queryable<Tree>().SetContextAsync(x=>x.ParentId,()=>item.Id, item);
});//無限層級
var treeRoot=db.Queryable<Tree>().Where(it => it.Id == 1).ToList();
//第一層
db.ThenMapper(treeRoot, item =>
{item.Child = db.Queryable<Tree>().SetContext(x => x.ParentId, () => item.Id, item).ToList();
});
//第二層
db.ThenMapper(treeRoot.SelectMany(it=>it.Child), it =>
{it.Child = db.Queryable<Tree>().SetContext(x => x.ParentId, () => it.Id, it).ToList();
});//跨庫 
var mydb=db.GetConnection(1);
mydb.ThenMapper(root,item=>{...});

方式3:導航方式

這種已經(jīng)不屬于子查詢了,屬于另一個查詢體系。

5、子查詢在Join?🎀

5.0.5.4+

var list = db.Queryable<Order>().Where(it =>SqlFunc.Subqueryable<A>() .LeftJoin<B>((i,y)=>i.ItemId==y.ItemId).InnerJoin<C>((i,y,z) => i.ItemId == z.ItemId).Where((i,y,z)=>i.ItemId==it.Aid).Any()).ToList();
//新版本支持了Subquery.join使用 Where<T1,T2>((x,y)=> x.id==y.id)

6、子查詢使用別名?🎀

如果點不出 AS 請升級

SqlFunc.Subqueryable<A>().AS("A01")  //這樣查詢的就是 A01表

7、字符串拼接

5.1.1-preview14 逗號拼接

 //sqlerver : FOR XML PATH//mysql sqlite : group_concat//oracle : listagg//pgsql  :string_aggvar list= db.Queryable<Order>().Select(it => new{ //names="名字1,名字2,名字3"names=SqlFunc.Subqueryable<custom>().Where(z=>z.oid==it.id).SelectStringJoin(z => z.Name, ",")}).ToList();//多字段 不能有null相加 , 字段有null需要加上 z.Name??""
.SelectStringJoin(z => SqlFunc.MergeString(z.Name,"-",z.Id.ToString()), ",")//去重復
.SelectStringJoin(it=>SqlFunc.MappingColumn<string>($"distinct {it.UserId}"),".")

8、只查一列 (top 1)

//First:select top 1 id
SqlFunc.Subqueryable<School>().Where(s => s.Id == st.Id).Select(s => s.Id)        
//max例1:
SqlFunc.Subqueryable<School>().Where(s => s.Id == st.Id).Max(s => s.Id)
//max例2:
SqlFunc.Subqueryable<School>().Where(s=>s.Id==st.Id).Select(s=>SqlFunc.AggregateMax(s.Id))       
//min:
SqlFunc.Subqueryable<School>().Where(s => s.Id == st.Id).Min(s => s.Id)
//avg:
SqlFunc.Subqueryable<School>().Where(s => s.Id == st.Id).Avg(s => s.Id)
//count:
SqlFunc.Subqueryable<School>().Where(s => s.Id == st.Id).Count()
//sum:
SqlFunc.Subqueryable<School>().Where(s => s.Id == st.Id).Sum(s => s.num)
//去重后匯總數(shù)量
SqlFunc.Subqueryable<School>().Where(s => z.Id == st.Id).Select(s=>SqlFunc.AggregateDistinctCount(s.Name))
//逗號分割列 
SqlFunc.Subqueryable<Order>().Where(z=>z.Id==it.Id).SelectStringJoin(z => z.Name, ",")//用例
Select(it=>new{ id=it.id,schoolname=SqlFunc.Subqueryable<School>().Where(s=>s.Id==it.ShoolId).Select(s=>s.Name)  //對應(yīng)的Sql:  //schoolname=(SELECT `Name` FROM `School` `s` WHERE (`s`.`Id`=`it`.`ShoolId`)limit 0,1)})//如果要查整個對象:看標題9

9、子查詢 First()整個對象

//需要升級5.1.4.59
var list= db.Queryable<Order>().Select(it => new{CustomId = it.CustomId,OrderId = it.Id,OrderName = it.Name,CustomList = SqlFunc.Subqueryable<Custom>().Where(c => c.Id == it.CustomId).First()}).ToList();
//可以轉(zhuǎn)DTO       
SqlFunc.Subqueryable<Custom>().Where(c => c.Id == it.CustomId).First(c=>new xxx(){ yy=c.id })//如果只查一個字段:標題8

????.NET開源 ORM 框架 SqlSugar 系列

  1. 【開篇】.NET開源 ORM 框架 SqlSugar 系列
  2. 【入門必看】.NET開源 ORM 框架 SqlSugar 系列
  3. 【實體配置】.NET開源 ORM 框架 SqlSugar 系列
  4. 【Db First】.NET開源 ORM 框架 SqlSugar 系列
  5. 【Code First】.NET開源 ORM 框架 SqlSugar 系列
  6. 【數(shù)據(jù)事務(wù)】.NET開源 ORM 框架 SqlSugar 系列
  7. 【連接池】.NET開源 ORM 框架 SqlSugar 系列
  8. 【查詢目錄】.NET開源 ORM 框架 SqlSugar 系列
  9. 【查詢基礎(chǔ)】.NET開源 ORM 框架 SqlSugar 系列
  10. 【排序用法】.NET開源 ORM 框架 SqlSugar 系列
  11. 【分組去重】.NET開源 ORM 框架 SqlSugar 系列
  12. 【聯(lián)表查詢】.NET開源 ORM 框架 SqlSugar 系列
  13. 【導航查詢】.NET開源 ORM 框架 SqlSugar 系列
  14. 【子查詢】.NET開源 ORM 框架 SqlSugar 系列
  15. 【嵌套查詢】.NET開源 ORM 框架 SqlSugar 系列
http://aloenet.com.cn/news/30245.html

相關(guān)文章:

  • 廣州手機網(wǎng)站建設(shè)黑馬程序員培訓機構(gòu)官網(wǎng)
  • 怎么做有邀請碼的網(wǎng)站五年級上冊語文優(yōu)化設(shè)計答案
  • 電子商務(wù)網(wǎng)站開發(fā)代碼常德網(wǎng)站建設(shè)公司
  • 免費網(wǎng)站建設(shè)ydwzjsseo培訓中心
  • 福建福州羅源建設(shè)局網(wǎng)站搜狗收錄提交入口
  • 做的美食視頻網(wǎng)站企業(yè)網(wǎng)站的推廣形式有
  • 做移門圖的 網(wǎng)站有哪些最近一周的重大熱點新聞
  • 什么軟件做高級網(wǎng)站交換友情鏈接推廣法
  • 外國網(wǎng)站學習做任務(wù) 升級互聯(lián)網(wǎng)推廣的方式
  • 聊城冠縣網(wǎng)站建設(shè)班級優(yōu)化大師怎么用
  • 做網(wǎng)站開發(fā)的集團品牌策劃案例
  • 網(wǎng)站建設(shè)證書網(wǎng)站建設(shè)流程步驟
  • 學校網(wǎng)站建設(shè)電話代刷網(wǎng)站推廣鏈接免費
  • 網(wǎng)絡(luò)運營和網(wǎng)絡(luò)營銷的區(qū)別合肥seo網(wǎng)絡(luò)優(yōu)化公司
  • 上海網(wǎng)站建設(shè)哪家品牌推廣軟文案例
  • 提供秦皇島網(wǎng)站建設(shè)江西省seo
  • 沒有網(wǎng)站可以做seo最新軍事頭條
  • 做網(wǎng)站公司職務(wù)免費找精準客戶軟件
  • 北京網(wǎng)站推廣seo優(yōu)化頁面設(shè)計
  • 西安門戶網(wǎng)站建設(shè)公司哪家好軟文廣告經(jīng)典案例600
  • 怎么在word里做網(wǎng)站百度競價代運營公司
  • 綜合社區(qū)網(wǎng)站開發(fā)費用公司網(wǎng)站建設(shè)費
  • 電銷防封號系統(tǒng)seo入門到精通
  • 娛樂公司網(wǎng)站建設(shè)價格電腦培訓學校排名
  • 成都企業(yè)網(wǎng)站建站大數(shù)據(jù)精準營銷的策略
  • 新疆建設(shè)管理局網(wǎng)站seo基礎(chǔ)教程使用
  • 網(wǎng)絡(luò)營銷推廣的優(yōu)劣勢深圳短視頻seo教程
  • 怎么增加網(wǎng)站的外鏈手機系統(tǒng)優(yōu)化
  • 煙臺網(wǎng)站建設(shè)公司鏈接推廣平臺
  • 鹽城網(wǎng)站開發(fā)招代理最火的網(wǎng)絡(luò)推廣平臺