Как указать условие в объединении Entity Framework? - PullRequest
0 голосов
/ 22 сентября 2011

У меня есть таблица Blogs, связанная с таблицей BlogComments с FK.

Мне нужно получить через Linq все элементы BlogComments, которые соответствуют определенному флагу

Если я сделаю:

db.Blogs.Where(b => b.BlogComments.Where(bc=>bc.Where(bc.Flag1==true));

Я получаю "Невозможно преобразовать тип IEnumerable в bool". 1008 *

Как лучше всего решить эту проблему?

Ответы [ 3 ]

2 голосов
/ 22 сентября 2011

Потому что это выражение:

b.BlogComments.Where(...)

возвращает IEnumerable (из BlogComments), но затем вы передаете его в этот метод:

db.Blogs.Where(...)

, который ожидает функцию, которая возвращаетbool, а не IEnumerable.

Возможно, вам нужно что-то вроде этого:

var blogId = 5;
db.BlogComments.Where(bc => bc.BlogId == blogId && bc.Flag1 == true)

Если вам нужно выбрать комментарии из нескольких блогов, вы можете попробовать использовать Contains:

var blogIds = new [] {1,2,3,4,5};
db.BlogComments.Where(bc => blogIds.Contains(bc.BlogId) && bc.Flag1 == true)

Если вы хотите разместить критерии на множестве блогов, а также комментарии, то вы можете сделать это в одном запросе, используя объединение:

var query = from b in db.Blogs
            join c in db.BlogComments on c.Blog equals b
            where b.SomeField == "some value"
            && c.Flag1 == true
            select c;
1 голос
/ 22 сентября 2011

Вы можете написать это в форме LINQ.

var blogs = from b in db.Blogs
            join c in db.BlogComments
            on b.BlogId equals c.BlogId
            where c.Flag1
            select b;

Если у вас есть составной ключ, вы можете написать

on new { A = b.BlogKey1, B = b.BlogKey2 }
  equals new { A = c.CommentKey1, B = c.CommentKey2 }
0 голосов
/ 22 сентября 2011

Если бы это был я, я бы просто использовал еще один DbSet в вашем DbContext.

DbSet<BlogComment> BlogComments

и просто перебирал там, не просматривая блоги.

db.BlogComments.Where(bc => bc.Flag1 == true);

Если кто-нибудь знает, еслив этом нет ничего плохого, тогда я весь в ушах:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...