Skip to content

Instantly share code, notes, and snippets.

@alfeg
Forked from SlyNet/gist:1113737
Created July 29, 2011 13:03
Show Gist options
  • Save alfeg/1113770 to your computer and use it in GitHub Desktop.
Save alfeg/1113770 to your computer and use it in GitHub Desktop.
/*db.Blogs
.Include("Posts")
.Include("Posts.Comments")
.Where(x => x.Id == 1)
.ToList();*/
SELECT [Project2].[Id] AS [Id],
[Project2].[Title] AS [Title],
[Project2].[Subtitle] AS [Subtitle],
[Project2].[AllowsComments] AS [AllowsComments],
[Project2].[CreatedAt] AS [CreatedAt],
[Project2].[C1] AS [C1],
[Project2].[C4] AS [C2],
[Project2].[Id1] AS [Id1],
[Project2].[Title1] AS [Title1],
[Project2].[Text] AS [Text],
[Project2].[PostedAt] AS [PostedAt],
[Project2].[BlogId] AS [BlogId],
[Project2].[UserId] AS [UserId],
[Project2].[C3] AS [C3],
[Project2].[C2] AS [C4],
[Project2].[Id2] AS [Id2],
[Project2].[Name] AS [Name],
[Project2].[Email] AS [Email],
[Project2].[HomePage] AS [HomePage],
[Project2].[Ip] AS [Ip],
[Project2].[Text1] AS [Text1],
[Project2].[PostId] AS [PostId]
FROM (SELECT [Extent1].[Id] AS [Id],
[Extent1].[Title] AS [Title],
[Extent1].[Subtitle] AS [Subtitle],
[Extent1].[AllowsComments] AS [AllowsComments],
[Extent1].[CreatedAt] AS [CreatedAt],
1 AS [C1],
[Project1].[Id] AS [Id1],
[Project1].[Title] AS [Title1],
[Project1].[Text] AS [Text],
[Project1].[PostedAt] AS [PostedAt],
[Project1].[BlogId] AS [BlogId],
[Project1].[UserId] AS [UserId],
[Project1].[Id1] AS [Id2],
[Project1].[Name] AS [Name],
[Project1].[Email] AS [Email],
[Project1].[HomePage] AS [HomePage],
[Project1].[Ip] AS [Ip],
[Project1].[Text1] AS [Text1],
[Project1].[PostId] AS [PostId],
CASE
WHEN ([Project1].[C1] IS NULL) THEN CAST(NULL AS int)
ELSE CASE
WHEN ([Project1].[Id1] IS NULL) THEN CAST(NULL AS int)
ELSE 1
END
END AS [C2],
CASE
WHEN ([Project1].[C1] IS NULL) THEN CAST(NULL AS int)
ELSE CASE
WHEN ([Project1].[Id1] IS NULL) THEN CAST(NULL AS int)
ELSE 1
END
END AS [C3],
[Project1].[C1] AS [C4]
FROM [dbo].[Blogs] AS [Extent1]
LEFT OUTER JOIN (SELECT [Extent2].[Id] AS [Id],
[Extent2].[Title] AS [Title],
[Extent2].[Text] AS [Text],
[Extent2].[PostedAt] AS [PostedAt],
[Extent2].[BlogId] AS [BlogId],
[Extent2].[UserId] AS [UserId],
[Extent3].[Id] AS [Id1],
[Extent3].[Name] AS [Name],
[Extent3].[Email] AS [Email],
[Extent3].[HomePage] AS [HomePage],
[Extent3].[Ip] AS [Ip],
[Extent3].[Text] AS [Text1],
[Extent3].[PostId] AS [PostId],
1 AS [C1]
FROM [dbo].[Posts] AS [Extent2]
LEFT OUTER JOIN [dbo].[Comments] AS [Extent3]
ON [Extent2].[Id] = [Extent3].[PostId]) AS [Project1]
ON [Extent1].[Id] = [Project1].[BlogId]
WHERE 1 = [Extent1].[Id]) AS [Project2]
ORDER BY [Project2].[Id] ASC,
[Project2].[C4] ASC,
[Project2].[Id1] ASC,
[Project2].[C3] ASC
//4.1
/* Same Query */
SELECT
[Project1].[Id] AS [Id],
[Project1].[Name] AS [Name],
[Project1].[C2] AS [C1],
[Project1].[Id1] AS [Id1],
[Project1].[Topic] AS [Topic],
[Project1].[Body] AS [Body],
[Project1].[PostDate] AS [PostDate],
[Project1].[Blog_Id] AS [Blog_Id],
[Project1].[C1] AS [C2],
[Project1].[Id2] AS [Id2],
[Project1].[Text] AS [Text],
[Project1].[Posted] AS [Posted],
[Project1].[Post_Id] AS [Post_Id]
FROM ( SELECT
[Extent1].[Id] AS [Id],
[Extent1].[Name] AS [Name],
[Join1].[Id1] AS [Id1],
[Join1].[Topic] AS [Topic],
[Join1].[Body] AS [Body],
[Join1].[PostDate] AS [PostDate],
[Join1].[Blog_Id] AS [Blog_Id],
[Join1].[Id2] AS [Id2],
[Join1].[Text] AS [Text],
[Join1].[Posted] AS [Posted],
[Join1].[Post_Id] AS [Post_Id],
CASE WHEN ([Join1].[Id1] IS NULL) THEN CAST(NULL AS int) WHEN ([Join1].[Id2] IS NULL) THEN CAST(NULL AS int) ELSE 1 END AS [C1],
CASE WHEN ([Join1].[Id1] IS NULL) THEN CAST(NULL AS int) ELSE 1 END AS [C2]
FROM [Blogs] AS [Extent1]
LEFT OUTER JOIN (SELECT [Extent2].[Id] AS [Id1], [Extent2].[Topic] AS [Topic], [Extent2].[Body] AS [Body],
[Extent2].[PostDate] AS [PostDate], [Extent2].[Blog_Id] AS [Blog_Id], [Extent3].[Id] AS [Id2], [Extent3].[Text] AS [Text],
[Extent3].[Posted] AS [Posted], [Extent3].[Post_Id] AS [Post_Id]
FROM [Posts] AS [Extent2]
LEFT OUTER JOIN [Comments] AS [Extent3] ON [Extent2].[Id] = [Extent3].[Post_Id] ) AS [Join1] ON [Extent1].[Id] = [Join1].[Blog_Id]
WHERE 1 = [Extent1].[Id]
) AS [Project1]
ORDER BY [Project1].[Id] ASC, [Project1].[C2] ASC, [Project1].[Id1] ASC, [Project1].[C1] ASC
//Code
public class Blog
{
public virtual List<Post> Posts { get; set; }
public string Name { get; set; }
public int Id { get; set; }
}
public class Post
{
public int Id { get; set; }
public string Topic { get; set; }
public string Body { get; set; }
public DateTime PostDate { get; set; }
public virtual List<Comment> Comments { get; set; }
}
public class Comment
{
public int Id { get; set; }
public string Text { get; set; }
public DateTime Posted { get; set; }
}
public class BlogContext : System.Data.Entity.DbContext
{
public DbSet<Blog> Blogs { get; set; }
}
class Program
{
static void Main(string[] args)
{
var sqlCeConnectionFactory = new SqlCeConnectionFactory("System.Data.SqlServerCe.4.0");
Database.DefaultConnectionFactory = sqlCeConnectionFactory;
using (var db = new BlogContext())
{
var blogsQuery = db.Blogs
.Include("Posts")
.Include("Posts.Comments")
.Where(x => x.Id == 1);
Console.WriteLine(blogsQuery.ToString());
var result = blogsQuery.ToList();
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment