Проверка временных меток в нескольких таблицах в ORDER BY с помощью LINQ - PullRequest
1 голос
/ 17 ноября 2010

Скажем, я веду блог и хочу отображать последние сообщения, основанные на последних действиях (таким образом, последняя отметка времени для нового сообщения ИЛИ новый комментарий ИЛИ новый лайк).Моя структура объектов выглядит следующим образом:

Post
 EntityCollection<Comment>
 EntityCollection<Like>

Сейчас я упорядочиваю только по последней отметке времени в сообщении:

public IQueryable<Post> GetPosts()
        {
            return from post in _db.Posts
                   orderby post.CreatedDate descending
                   select post;
        }

Как я могу изменить это, чтобы он проверялCreatedDate для комментариев и лайков, так что мой порядок основан на последней активности, а не только на дате создания сообщения?

Ответы [ 3 ]

1 голос
/ 17 ноября 2010

Если предположить, что элемент внешнего ключа в таблице Like и таблице комментариев называется PostID,

List<Comment> lstComment
List<Like> lstLike

Измените запрос на:

var posts = from p in lstPost
            join c in lstComments on p.ID equals c.PostID
            join l in lstLikes on p.ID equals l.PostID
            orderby p.CreateDate, c.ActionDate, l.ActionDate
            select p;

Удачи!

1 голос
/ 17 ноября 2010

Использовать измененную дату в таблице сообщений, и всякий раз, когда к этому сообщению добавляется комментарий, обновляется измененная дата до текущего времени и используется измененная дата для сортировки.

1 голос
/ 17 ноября 2010

Вы должны создать общую таблицу, которая называется что-то вроде Actions или Events или что-то подобное.Эта таблица должна регистрировать каждое происходящее событие - сообщения, комментарии и лайки.Таблица содержит общую информацию о каждом событии.Эта информация может, например, включать время события, тип события, идентификатор пользователя, который инициировал событие, и уникальный идентификатор события.Для получения более конкретной информации о событии вам необходимо присоединиться к вашим конкретным таблицам, используя ограничение внешнего ключа в конкретной таблице, которая ссылается на общую таблицу.

С этой структурой легко получить список всехсобытия в отсортированном порядке, и это будет эффективно, если будет проиндексирован столбец отметки времени в общей таблице.

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