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();

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

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/534446.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/534446.shtml
英文地址,請注明出處:http://en.pswp.cn/news/534446.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

php 遞歸欄目名疊加,thinkPHP實現遞歸循環欄目并按照樹形結構無限極輸出的方法,thinkphp遞歸...

thinkPHP實現遞歸循環欄目并按照樹形結構無限極輸出的方法,thinkphp遞歸本文實例講述了thinkPHP實現遞歸循環欄目并按照樹形結構無限極輸出的方法。分享給大家供大家參考,具體如下:這里使用thinkphp遞歸循環欄目按照樹形結構無限極輸出&#…

php cannot call constructor,安裝ECshop普遍問題的解決方法

安裝時的問題:1.Strict Standards: Non-static method cls_image::gd_version() should not be called statically in /usr/local/httpd2/htdocs/upload/install/includes/lib_installer.php on line 31解決:找到install/includes/lib_installer.php中的…

wind試用版 matlab,免費產品試用 - MATLAB Simulink

請選擇其一AlabamaAlaska美屬薩摩亞APO/FPO AAAPO/FPO AEAPO/FPO APArizonaArkansasCaliforniaCaroline IslandsColoradoConnecticutDelawareDistrict of ColumbiaFlorida格魯吉亞關島HawaiiIdahoIllinoisIndianaIowaKansasKentuckyLouisianaMaineMariana Islands馬紹爾群島Mar…

php yii2 sns,GitHub - yggphpcoder/iisns: 基于 yii2 的 sns 社區系統,一站式解決社區建站...

iisns - 地球村入口iiSNS 是基于 yii2 的 SNS 社區系統,一站式解決社區建站。可以寫文章,做記錄,上傳圖片,論壇聊天等。還可以用來做內容管理系統(CMS)。iiSNS 是一個免費的開源項目,在 MIT 許可證下授權發布。特點與功…

php mvc 商城,基于MVC框架的小型網上商城設計

2.本人對課題任務書提出的任務要求及實現預期目標的可行性分析基于MVC框架的小型網上商城實現的功能:商品的瀏覽、查詢、購買,會員注冊以及會員訂單的查詢等,方便商場活動,該系統基本實現了網上商城的應有功能。該系統…

php 做更新進度條,PHP exec()后更新Bootstrap進度條

我使用PHP來運行一個python腳本,并且在腳本執行后需要更新一個進度條。進度條更新后,將執行另一個腳本,依此類推。這里是我的代碼如此的票價。我試圖用JavaScript來實現。它沒有解決Button Textif (isset($_POST[turn])){exec("sudo pyt…

zblog php和asp功能,ZBlog是否適合PHP或ASP?我們該如何選擇?

我最近玩了zblog一段時間,對于大多數第一次聯系zblog的博客,他們會問zblog是否適合PHP或ASP?我們該如何選擇?事實上,我真的不明白這個問題。我個人更喜歡PHP。今天我將整理出來并對PHP版本和ASP版本進行比較&#xff0…

php js記住密碼功能,jquery.cookie.js實現用戶登錄保存密碼功能的方法_jquery

本文實例講述了jquery.cookie.js實現用戶登錄保存密碼功能的方法。分享給大家供大家參考,具體如下:需要導入的js有jquery.js和jquery.cookie.js在頁面加載時首先嘗試獲取cookie的值,如果cookie有值,則將獲取到的值填入輸入框中&am…

oracle dbf 超大,oracle?數據庫users01.dbf文件過大?轉移方法

如果出現 linux 拒絕錯誤,可以把目錄權限 該為777由于在安裝的時候將Oracle安裝到了C盤,表空間也創建到了C盤(當時沒有在意),等項目進行到了中期,發現C盤的空間不夠用了。此時,一個較好的解決辦法就是將表空間的文件轉…

oracle中exists連接兩個表,IN、EXISTS、多表連接,哪個速度更快

本帖最后由 ghsau 于 2011-10-11 23:39 編輯請看下面三個執行計劃(Oracle10g)1. 用INSQL> select ename from emp e where e.deptno in (select d.deptno from dept d where d.dnameSALES);PLAN_TABLE_OUTPUT------------------------------------------------------------…

php決策管理,報表管理與數據分析:為系統未來發展規劃提供決策依據,有效避免IT管理與投資的盲目??...

據了解,很多中大型企事業單位的IT基礎結構具有復雜、分散等特征,并且信息化程度越高,數據類型越繁雜,數據量也越龐大。許多單位不得不付出極大的人力、物力對網絡進行管理。而一個單位的信息化的程度和IT部門的服務水平&#xff0…

oracle遷移undo表空間,oracle切換undo表空間

Oracle里的回滾表空間在數據庫使用一段時間后,undo表空間的dbf文件往往會增長到比較大,這個時候我們需要切換undo表空間1.新建undo表空間SQL> create undo tablespace undotbs2 datafile /data/undotbs02.dbf size 10M autoextend on next 10M ;2.由于…

pppoe linux 配置文件,linux PPPOE服務端配置

查看pppo服務器安裝包pm -qa | grep pppoe 可以看到系統中pppoe server安裝包rpm -ql rp-pppoe-3.5-2 查看該安裝包安裝信息(如安裝路徑,配置文件等),如果有信息輸出,你可以看到這一行:/sbin/pppoe-serverps -e | grep pppoe-serve 查看pppoe服務有沒有運行,如果沒有,則啟動: p…

設置linux撥號服務端,CentOS Linux上搭建PPPoE服務器及撥號設置

CentOS下PPPoE撥號設置1.查看并安裝撥號軟件:[rootRedHat ~]# rpm -qa|grep pppoe[rootredhat ~]# yum -y install rp-pppoerp-pppoe.i686 0:3.10-8.el62.查看adsl-setup命令所在位置:[rootredhat ~]#whereis adsl-setupadsl-setup:或者直接搜索pppoe信息…

Linux原始網絡編程,Linux操作系統網絡編程 原始套接字 (1)

Linux操作系統網絡編程--原始套接字 (1)http://soft.zdnet.com.cn/software_zone/2007/1020/568223.shtml我們在前面已經學習過了網絡程序的兩種套接字(SOCK_STREAM,SOCK_DRAGM).在這一章 里面我們一起來學習另外一種套接字--原始套接字(SOCK_RAW)。應用原始套接字,我們可以編寫…

linux上pyenv卸載,在Ubuntu 18.04系統下安裝pyenv的方法

本文介紹在Ubuntu 18.04操作系統下安裝pyenv的方法,使用它可以進行Python多版本管理,目的是防止不同的Python版本因為不兼容而出現錯誤。安裝pyenv其實非常的簡單,只需要在系統終端中運行一條命令即可,以下是操作方法,…

linux防火墻作用是什么,Linux防火墻操作1

什么是防火墻防火墻可通過監測、限制、更改跨越防火墻的數據流,盡可能地對外部屏蔽網絡內部的信息、結構和運行狀況,以此來實現網絡的安全保護。簡單來講 就是防止外界通過網絡攻擊Linux服務器的一個軟件本次學習目標:防火墻的啟停&#xff0…

linux中touch命令的作用,Linux中touch命令的作用是什么

今天微子網絡向你展示了觸摸命令在Linux中的功能。內容簡潔易懂,一定會讓你眼前一亮。希望通過這篇文章的詳細介紹,你能有所收獲。linux的Touch命令不常用,但在使用make時可能會用到,make用于修改文件時間戳或創建一個不存在的新文…

linux打jar包xml文件,springboot打jar包部署外置配置文件

一、讀取配置文件的優先級默認:Jar包同級目錄的config目錄Jar包同級目錄classPath(即resources目錄)的config目錄classpath目錄最高優先級的方式是項目啟動時通過命令的方式指定項目加載核心配置文件,命令如下java –jar xxxx.jar -Dspring.config.locat…

linux將視頻導入到iphone,如何將 IPhone 的文件導入 Linux

如何將 IPhone 的文件導入 Linux完全免費方案。方法一: 使用 Koder 的 Local File Access 功能這方法不需要在 Linux 端做任何配置。IPhone 端安裝 koder進入應用 Koder點擊右下角的 Settings進入 Local File Access選擇 Enable Local File Access你可以看到一個鏈接…