LINQ嵌套查詢(xún)實(shí)現(xiàn)淺析
LINQ嵌套查詢(xún)是如何實(shí)現(xiàn)的呢?那么下面我們看看具體的操作是怎么樣的,它對(duì)于我們的實(shí)際開(kāi)發(fā)實(shí)踐有什么幫助,那么讓我們開(kāi)始吧。
LINQ嵌套查詢(xún)應(yīng)用實(shí)例:
如果我們需要取出市場(chǎng)部的所有員工,在以往的O/R Mapping框架中,往往需要取兩次(我們不考慮存在映射關(guān)系的情況),一次是取出市場(chǎng)部的編號(hào),再使用編號(hào)來(lái)取出所有員工。LINQ給我們提供了更好的解決辦法,我們可以這樣操作:
- var query = from employee in dbdata.Employees
- where employee.DepId ==
- (from department in dbdata.Departments
- where department.DepName == "市場(chǎng)部"
- select department ).Single().DepId
- select employee;
這里我們使用了嵌套查詢(xún)來(lái)完成,這句話在執(zhí)行的時(shí)候,LINQ嵌套查詢(xún)被轉(zhuǎn)換成了SQL的嵌套查詢(xún):
- SELECT [t0].[EmployeeId], [t0].[DepId],
- [t0].[EmployeeName], [t0].[EmployeeSalary]
- FROM [dbo].[Employee] AS [t0]
- WHERE [t0].[DepId] = (
- SELECT [t1].[DepId] FROM [dbo].[Department] AS [t1]
- WHERE [t1].[DepName] = @p0)
當(dāng)然,在這里,我們不必那么麻煩,只需要使用已經(jīng)存在的實(shí)體關(guān)系,就可以輕松的完成:
- var query = from employee in dbdata.Employees
- where employee.Department.DepName == "市場(chǎng)部"
- select employee;
不過(guò),這和剛才的查詢(xún)卻有本質(zhì)的差別,我們來(lái)看看這里,LINQ轉(zhuǎn)換成什么樣的SQL語(yǔ)句了:
- SELECT [t0].[EmployeeId], [t0].[DepId],
- [t0].[EmployeeName], [t0].[EmployeeSalary]
- FROM [dbo].[Employee] AS [t0] LEFT OUTER JOIN [dbo].
- [Department] AS [t1] ON [t1].[DepId] = [t0].[DepId]
- WHERE [t1].[DepName] = @p0
這里,轉(zhuǎn)換出來(lái)的并不是嵌套的SQL語(yǔ)句,而被轉(zhuǎn)換成了左連接查詢(xún),可以看出,嵌套查詢(xún)是我們?cè)谔厥獾那闆r下,可以使用的一個(gè)利器。
LINQ嵌套查詢(xún)的基本內(nèi)容就向你介紹到這里,希望對(duì)你了解和學(xué)習(xí)LINQ嵌套查詢(xún)有所幫助。
【編輯推薦】