static void Main(string[] args)
{
using (var db = new BlogContext())
{
db.Database.Log = Console.WriteLine;
var query = from a in db.Blogs
join b in db.Posts on a.BlogId equals b.BlogId into jjj
from t in jjj.DefaultIfEmpty()
select a;
foreach (var blog in query)
{
Console.WriteLine(blog.Name);
}
Console.WriteLine("-----------------------------------");
var query2 = from a in db.Blogs
join b in db.Posts on a.BlogId equals b.BlogId into jjj
select a;
foreach (var blog in query2)
{
Console.WriteLine(blog.Name);
}
}
Console.WriteLine("Press any key to exit...");
Console.ReadKey();
}
兩個表如下
這兩個查詢生成的SQL 差別在哪兒???
SELECT
[Extent1].[BlogId] AS [BlogId],
[Extent1].[Name] AS [Name],
[Extent1].[Url] AS [Url],
[Extent1].[Rating] AS [Rating]
FROM [dbo].[Blogs] AS [Extent1]
LEFT OUTER JOIN [dbo].[Posts] AS [Extent2] ON [Extent1].[BlogId] = [Extent2].[BlogId]
-- 正在 2019/3/12 10:44:02 +08:00
執行
-- 已在 2 毫秒內完成,結果爲: SqlDataReader
Blog 1
Blog 2
Blog 2
Blog 3
已於 2019/3/12 10:44:02 +08:00
關閉了連接
-----------------------------------
已於 2019/3/12 10:44:02 +08:00
打開了連接
SELECT
[Extent1].[BlogId] AS [BlogId],
[Extent1].[Name] AS [Name],
[Extent1].[Url] AS [Url],
[Extent1].[Rating] AS [Rating]
FROM [dbo].[Blogs] AS [Extent1]
-- 正在 2019/3/12 10:44:02 +08:00
執行
-- 已在 0 毫秒內完成,結果爲: SqlDataReader
Blog 1
Blog 2
Blog 3
第二個查詢的join 沒用!
*************************************************************************************************************************************************鏈接查詢也是先要做交叉查詢。
/****** Script for SelectTopNRows command from SSMS ******/
SELECT p.Title, [Name]
FROM [MigrationsDemo.Model+BlogContext].[dbo].[Blogs] m left join [MigrationsDemo.Model+BlogContext].[dbo].[Posts] p on 1=1
SELECT p.Title, [Name]
FROM [MigrationsDemo.Model+BlogContext].[dbo].[Blogs] m inner join [MigrationsDemo.Model+BlogContext].[dbo].[Posts] p on 1=1
SELECT p.Title, [Name]
FROM [MigrationsDemo.Model+BlogContext].[dbo].[Blogs] m, [MigrationsDemo.Model+BlogContext].[dbo].[Posts] p
這3個查詢的結果一樣,執行計劃也一樣?