У меня случай понедельника ...
Мне нужно выбрать сообщения в блоге на основе недавней активности в коллекции комментариев к сообщению (у сообщения есть свойство List<Comment>
, а также у комментария есть свойство сообщения, устанавливающее связь. Я не хочу показывать то же самое опубликовать дважды, и мне нужно только подмножество объектов, а не все сообщения.
Сначала нужно было захватить все посты с комментариями, а затем упорядочить их по последним комментариям. Чтобы это работало, я уверен, что мне придется ограничить комментарии для каждого поста первым / новым комментарием. В заключение я бы просто взял первые 5 (или любое максимальное число результатов, которое я хочу передать в метод).
Во-вторых, нужно собрать все комментарии, упорядоченные по CreatedOn, и отфильтровать их, чтобы в каждом сообщении был только один комментарий. Затем верните эти лучшие (все) сообщения. Это похоже на первый вариант, просто пройти через заднюю дверь.
У меня ужасный вариант с двумя запросами. Я работал с некоторым LINQ на стороне для фильтрации, но я знаю, что есть более элегантный способ сделать это с помощью API NHibernate. Надеюсь увидеть здесь несколько хороших идей.
РЕДАКТИРОВАТЬ: Вот что работает для меня до сих пор. Хотя это работает, я уверен, что есть лучший способ сделать это ...
// get all comments ordered by CreatedOn date
var comments = Session.CreateCriteria(typeof(Comment)).AddOrder(new Order("CreatedOn", false)).List<Comment>();
var postIDs = (from c in comments select c.ParentPost.ID).Distinct();
// filter the comments
List<Post> posts = new List<Post>();
foreach(var postID in postIDs)
{
var post = Get(postID); // get a Post by ID
if(!posts.Contains(post)) // this "if" is redundant due to the Distinct filter on the PostIDs collection
{
posts.Add(post);
}
}
return posts;