Попробуйте использовать что-то вроде этого:
List<User> users = _session.CreateQuery("FROM User ORDER BY CreatedOn").List<User>().Where(u => ids.Contains(u.Id));
var posts = new List<Post>();
foreach(User user in users) {
posts.AddRange(user.Posts);
}
Полагаю, это будет зависеть от того, что у вашего пользователя уже есть коллекция сообщений, но в большинстве реализаций гибернации должно быть что-то подобное.
Вы также можете сжать его немного так:
List<Post> posts = _session.CreateQuery("FROM Post ORDER BY CreatedOn").List<Post>().Where(p => ids.Contains(p.User.Id));
ИЛИ третий вариант:
List<Post> posts = _session.CreateQuery("FROM Post ORDER BY CreatedOn WHERE User.Id IN (" + ids.ToArray().Join(",") + ")").List<Post>();