LINQ嵌套查詢實現(xiàn)淺析
LINQ嵌套查詢是如何實現(xiàn)的呢?那么下面我們看看具體的操作是怎么樣的,它對于我們的實際開發(fā)實踐有什么幫助,那么讓我們開始吧。
LINQ嵌套查詢應(yīng)用實例:
如果我們需要取出市場部的所有員工,在以往的O/R Mapping框架中,往往需要取兩次(我們不考慮存在映射關(guān)系的情況),一次是取出市場部的編號,再使用編號來取出所有員工。LINQ給我們提供了更好的解決辦法,我們可以這樣操作:
- var query = from employee in dbdata.Employees
- where employee.DepId ==
- (from department in dbdata.Departments
- where department.DepName == "市場部"
- select department ).Single().DepId
- select employee;
這里我們使用了嵌套查詢來完成,這句話在執(zhí)行的時候,LINQ嵌套查詢被轉(zhuǎn)換成了SQL的嵌套查詢:
- 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)
當然,在這里,我們不必那么麻煩,只需要使用已經(jīng)存在的實體關(guān)系,就可以輕松的完成:
- var query = from employee in dbdata.Employees
- where employee.Department.DepName == "市場部"
- select employee;
不過,這和剛才的查詢卻有本質(zhì)的差別,我們來看看這里,LINQ轉(zhuǎn)換成什么樣的SQL語句了:
- 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)換出來的并不是嵌套的SQL語句,而被轉(zhuǎn)換成了左連接查詢,可以看出,嵌套查詢是我們在特殊的情況下,可以使用的一個利器。
LINQ嵌套查詢的基本內(nèi)容就向你介紹到這里,希望對你了解和學習LINQ嵌套查詢有所幫助。
【編輯推薦】