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个查询的结果一样,执行计划也一样?