Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to use Include and Anonymous Type in same query in Entity Framework?

In How To Count Associated Entities using Where In Entity Framework I get this query

But when I access queryResult[0].post.Category or queryResult[0].post.Tags it´s always empty, because I am not using Include.

Include dont work with Projection, as microsoft say at last item here: http://msdn.microsoft.com/en-us/library/bb896317.aspx

var queryResult = (from post in posts
                           join comment in comments.Where(x=> x.IsPublic) on post.Id equals comment.Post.Id into g
                    select new
                               {
                                   post,
                                   post.Author,
                                   post.Tags,
                                   post.Categories,
                                   Count = g.Count()
                               })

How I can get the Count in the same query, and Include relationship to Tags and Categories?

Why EF relationship fix-up dont work here?

like image 929
Felipe Pessoto Avatar asked Nov 14 '22 02:11

Felipe Pessoto


1 Answers

This can be done with 2 queries:

var posts =
  from post in context.Posts.Include(p => p.Author).Include(p => p.Tags).Include(p => p.Categories)
  where post.Comments.Any(c => c.IsPublic)
  select post;
var counts =
  from post in context.Posts
  where post.Comments.Any(c => c.IsPublic)
  select new { PostId = post.Id, Count = post.Comments.Count() };
var countDictionary = counts.ToDictionary(e => e.PostId, e => e.Count);

foreach (var item in posts)
{
  System.Console.WriteLine("PostId {0}, TagCount {1}, PublicCommentCount {2}", item.Id, item.Tags.Count, countDictionary[item.Id]);
}

By Diego Vega: http://social.msdn.microsoft.com/Forums/en-US/adonetefx/thread/c0bae1c1-08b2-44cb-ac29-68a6518d87bd

like image 104
Felipe Pessoto Avatar answered Nov 17 '22 00:11

Felipe Pessoto