日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

mysql 查询 投影,MySql-连接查询

發布時間:2025/3/8 数据库 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql 查询 投影,MySql-连接查询 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

連接查詢

Chloe 友好支持多表連接查詢,一切都可以用 lambda 表達式操作,返回類型可以是自定義類型,也可以是匿名類型。強類型開發,編譯可見錯誤,容錯率高。

1.建立連接:

var user_city_province = context.Query()

.InnerJoin((user, city) => user.CityId == city.Id)

.InnerJoin((user, city, province) => city.ProvinceId == province.Id);

2.得到一個 IJoiningQuery 對象,就可以 Select 所需要的數據返回一個 IQuery 對象,然后就可以進行 Where、OrderBy、GroupBy、分頁、聚合查詢等操作:

查出一個用戶及其隸屬的城市和省份的所有信息:

/* 調用 Select 方法返回一個泛型為包含 User、City、Province 匿名類型的 IQuery 對象。

* Select 方法也可以返回自定義類型 。

*/

var qq = user_city_province.Select((user, city, province) => new

{

User = user,

City = city,

Province = province

});

/* 根據條件篩選,然后調用 ToList 就會返回一個泛型為 new { User = user, City = city, Province = province } 的 List 集合 */

var result = qq.Where(a => a.User.Id == 1).ToList();

/*

* 生成的 sql:

* SELECT `Users`.`Id` AS `Id`,`Users`.`Name` AS `Name`,`Users`.`Gender` AS `Gender`,`Users`.`Age` AS `Age`,`Users`.`CityId` AS `CityId`,`Users`.`OpTime` AS `OpTime`,`City`.`Id` AS `Id0`,`City`.`Name` AS `Name0`,`City`.`ProvinceId` AS `ProvinceId`,`Province`.`Id` AS `Id1`,`Province`.`Name` AS `Name1`

FROM `Users` AS `Users`

INNER JOIN `City` AS `City` ON `Users`.`CityId` = `City`.`Id`

INNER JOIN `Province` AS `Province` ON `City`.`ProvinceId` = `Province`.`Id`

WHERE `Users`.`Id` = 1

*/

/* 如果不想返回所有字段,得到 IQuery 對象后可以進一步 Select 指定的字段提高查詢性能

* ##推薦使用此方式##

*/

var result1 = qq.Where(a => a.User.Id == 1)

.Select(a => new { UserId = a.User.Id, UserName = a.User.Name, CityName = a.City.Name, ProvinceName = a.Province.Name })

.ToList();

可以只獲取指定的字段信息:

user_city_province.Select((user, city, province) => new

{

UserId = user.Id,

UserName = user.Name,

CityName = city.Name,

ProvinceName = province.Name

}).Where(a => a.UserId == 1).ToList();

/*

* 生成的 sql 只會包含 UserId、UserName、CityName、ProvinceName 四個字段

* SELECT `Users`.`Id` AS `UserId`,`Users`.`Name` AS `UserName`,`City`.`Name` AS `CityName`,`Province`.`Name` AS `ProvinceName`

FROM `Users` AS `Users`

INNER JOIN `City` AS `City` ON `Users`.`CityId` = `City`.`Id`

INNER JOIN `Province` AS `Province` ON `City`.`ProvinceId` = `Province`.`Id`

WHERE `Users`.`Id` = 1

*/

快捷連接

框架提供了快捷連接的接口:

context.JoinQuery((user, city, province) => new object[]

{

JoinType.LeftJoin, user.CityId == city.Id, /* 表 User 和 City 進行Left連接 */

JoinType.LeftJoin, city.ProvinceId == province.Id /* 表 City 和 Province 進行Left連接 */

})

.Select((user, city, province) => new { User = user, City = city, Province = province }) /* 投影成匿名對象 */

.Where(a => a.User.Id > -1) /* 進行條件過濾 */

.OrderByDesc(a => a.User.Age) /* 排序 */

.TakePage(1, 20) /* 分頁 */

.ToList();

超過5個表連接

//假設已經有5個表建立了連接的對象為 jq_q1_q5

IJoiningQuery jq_q1_q5 = null;

//jq_q1_q5 調用 Select 方法,返回一個包含 T1-T5 的 IQuery 對象 view_q1_q5

var view_q1_q5 = jq_q1_q5.Select((t1, t2, t3, t4, t5) => new { T1 = t1, T2 = t2, T3 = t3, T4 = t4, T5 = t5 });

//假設第6個表的 IQuery 對象為 q6

IQuery q6 = null;

//這時,view_q1_q5 與 q6 建立連接,返回 IJoiningQuery 對象 jq

var jq = view_q1_q5.InnerJoin(q6, (t1_t5, t6) => t1_t5.T5.XX == t6.XXX);

//然后我們調用 jq 的 Select 方法,返回一個包含 T1-T6 的 IQuery 對象 view。

//view 又是一個 IQuery 對象,泛型參數為包含 T1-T6 所有信息的匿名對象(這時候還沒有發起 sql 查詢哦),拿到它,我們就可以為所欲為了。

var view = jq.Select((t1_t5, t6) => new { T1 = t1_t5.T1, T2 = t1_t5.T2, T3 = t1_t5.T3, T4 = t1_t5.T4, T5 = t1_t5.T5, T6 = t6 });

//可以直接查出數據庫中 T1-T6 的所有信息

view.ToList();

//也可以選取 T1-T6 中我們想要的字段

view.Select(a => new { a.T1.xx, a.T2.xx, a.T3.xx /*...*/}).ToList();

框架亦支持左連接、右連接查詢,用法和內連接相同。

總結

以上是生活随笔為你收集整理的mysql 查询 投影,MySql-连接查询的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。