Как подсчитать связанные объекты, используя Where In Entity Framework - PullRequest
2 голосов
/ 17 февраля 2011

У меня есть это:

        var queryResult = (from post in posts
                    select new
                               {
                                   post,
                                   post.Author,
                                   post.Tags,
                                   post.Categories,
                                   Count = post.Comments.Count()
                               }).ToList();

Но мне нужно что-то вроде этого:

        var queryResult = (from post in posts
                    select new
                               {
                                   post,
                                   post.Author,
                                   post.Tags,
                                   post.Categories,
                                   Count = post.Comments.Where(x=>x.IsPublic).Count()
                               }).ToList();

Но post.Comments это ICollection

Ответы [ 4 ]

0 голосов
/ 25 февраля 2011

Я написал это как LukLed, но чтобы он работал, я использую сущность PK of Post:

var queryResult = (from post in context.Posts
                select new
                           {
                               post,
                               post.Author,
                               post.Tags,
                               post.Categories,
                               Count = context.Comments.Where(c => c.Post.Id == post.Id && c.IsPublic == 1).Count()
                           }).ToList();

Или Post.Id может быть записан как PostId, если открыты ключи forignчерез ассоциацию, которая, я считаю, будет более эффективной.

0 голосов
/ 17 февраля 2011

Попробуйте:

var queryResult = (from post in context.Posts
                select new
                           {
                               post,
                               post.Author,
                               post.Tags,
                               post.Categories,
                               Count = context.Comments.Where(c => c.Post == post).Where(c => IsPublic == 1).Count()
                           }).ToList();
0 голосов
/ 17 февраля 2011

Это работает:

        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()
                               })

Но во всех решениях мы имеем эту проблему Как использовать Включить и Анонимный Тип в одном запросе в Entity Framework?

0 голосов
/ 17 февраля 2011

Как насчет использования Enumerable.Cast<T>(), как это?

var queryResult = (from post in posts
                    select new
                               {
                                   post,
                                   post.Author,
                                   post.Tags,
                                   post.Categories,
                                   Count = post.Comments.Cast<Comment>()
                                                        .Where(x=>x.IsPublic).Count()
                               }).ToList();

при условии post.Comments имеет тип Comment

...