Вы можете подойти к этому снизу вверх.
var blogIds = Posts.Where(x => x.Description == "Test").Select(x => x.BlogId);
var result = Blog.Where(x => blogIds.Contains(x.Id))
Обратите внимание, что вы можете сделать:
x => x.Description.Contains("Test")
вместо:
x => x.Description == "Test"
в первый запрос
Однако вам все равно придется сопоставить соответствующие сообщения с каждым блогом.
Обновление
Ответ Стива правильный. Я просто добавлю, что это может быть переведено во множество вложенных запросов выбора. Вы можете проверить вывод в профилировщике сервера SQL или в окне вывода в Visual Sudio. Итак, вот все, включая отображение:
var posts = Posts.Where(x => x.Description == "test").ToList();
var blogIds = posts.Select(x => x.BlogId).ToList();
var blogs = Blog.Where(x => blogIds.Contains(x.Id)).ToList();
foreach(var blog in blogs)
blog.Posts = posts.Where(x => x.BlogId == x.Id).ToList()