2015-03-05 3 views
0

У меня есть структура базы данных, которая имеет множество пользователей и их UserIdРегистрация в LINQ в где положение

Я тогда есть таблица под названием «Post», который состоит из текстового поля и поля CreatedBy.

У меня тогда есть таблица «Follows», которая состоит из полей «WhoIsFollowing» и «WhoTheyFollow».

Идея состоит в том, что таблица «Follows» отображает пользователей, которым пользуется другой пользователь «Follows».

Если я использую приложение в качестве конкретного пользователя, и я хочу получить все мои соответствующие «сообщения», это будут сообщения тех пользователей, которых я придерживаюсь, или мои собственные сообщения.

Я пытаюсь получить это в одном заявлении LINQ, но не смог добиться его совершенства. В конечном счете мне нужно запросить таблицу «Сообщений» для всех «Постов», которые я опубликовал, и присоединился ко всем сообщениям людей, которых я придерживаюсь в таблице «Follows».

Я получил это работаю с этим утверждением

postsWeWant = (from s in db.Posts 
       join sa in db.Follows on s.CreatedBy equals sa.WhoTheyAreFollowing into joinTable1 
       from x in joinTable1.DefaultIfEmpty() 
       where (x.WhoIsFollowing == userId || s.CreatedBy == userId) && !s.Deleted 
       orderby s.DateCreated descending 
       select s).Take(25).ToList(); 

Вопрос заключается в том, что он, кажется, вернулся с дубликатами для всех сообщений, отправленных самого пользователем. Я добавил .Distinct(), чтобы обойти это, но вместо того, чтобы принимать по 25 сообщений каждый раз, дубликаты означают, что он возвращается с гораздо меньшим количеством, когда в нем много сообщений этого пользователя в последних 25.

Во-первых, почему вышеупомянутое возвращается с дубликатами? (Это поможет мне понять утверждение немного больше), а во-вторых, как мне обойти это?

+0

Почему вы делаете левое внешнее соединение? –

+0

@EhsanSajjad Я думаю, он пытается включить плакаты, которые не следуют никому – Yohannes

ответ

2

Его трудно сказать точно без структуры данных, но я бы рекомендовал исследовать и, возможно, расширить ваше соединение, чтобы устранить дублируемую связь.

Если это не удается, я бы использовал предложение group by, чтобы удалить дубликаты, поэтому нет необходимости в отдельном. Причина, по которой вы заканчиваете работу с менее чем 25 записями, вероятно, связана с тем, что устранение дубликатов происходит после принятия 25. Но я думаю, что мне понадобится больше вашего кода, чтобы точно сказать.

Смежные вопросы