Ответ 1
Вот как я бы сделал это в одном запросе на основе предоставленной вами информации.
var posts = await _context.Post
.Where(post =>
_context.BlogPost.Any(bp => bp.BlogId == blogId && bp.PostId == post.PostId)
)
.ToListAsync();
Вот как я бы сделал это в двух запросах, чтобы использовать Contains
на основе предоставленной вами информации.
var postIds = await _context.BlogPost
.Where(bp => bp.BlogId = blogId)
.Select(bp => bp.PostId)
.ToArrayAsync();
var posts = await _context.Post
.Where(p => postIds.Contains(p.PostId))
.ToListAsync();
Вот как я мог бы сделать это в одном запросе, если бы использовал ценные функции EntityFramework, и у меня было свойство ссылки с именем Post на BlogPost.
var posts = await _context.BlogPost
.Where(bp => bp.BlogId == blogId)
.Select(bp => bp.Post)
.ToListAsync();
Вот как я мог бы сделать это в одном запросе, если бы я использовал ценные функции EntityFramework, и у меня было свойство коллекции, названное Posts from Blog, и таблица многие-многие BlogPost была скрыта EntityFramework таким образом, что вы фактически никогда не взаимодействовали с это из С#.
var posts = await _context.Blog
.Where(b => b.BlogId == blogId)
.SelectMany(b => b.Posts)
.ToListAsync();
С другой стороны, если EntityFramework предоставляет таблицу много-много блогов BlogPost, вы все равно можете начать с блога и использовать правильно настроенные свойства коллекции и ссылки, чтобы получить такие сообщения.
var posts = await _context.Blog
.Where(b => b.BlogId == blogId)
.SelectMany(b => b.BlogPosts)
.Select(bp => bp.Post)
.ToListAsync();
Или же
var posts = await _context.Blog
.Where(b => b.BlogId == blogId)
.SelectMany(b => b.BlogPosts.Select(bp => bp.Post))
.ToListAsync();
Выносите, EntityFramework - это не SQL. То, что вы делаете в SQL, может или не может отображаться напрямую, или даже применяться к тому, как вы это сделаете в EntityFramework. Не только это, но и когда вы используете EntityFramework, вы используете функции языка EntityFramework и С#, которые сами по себе не являются EntityFramework, например LINQ. Разбиение проблемы на составные части может помочь вам решить проблемы и упростить изучение до возможности выполнять более сложные операции. Изучение и практика LINQ в отдельности поможет вам стать лучше с EntityFramework.