Подходит ли объединение для реализации такой функциональности в LINQ to SQL? - PullRequest
1 голос
/ 06 сентября 2010

Я пишу сайт ASP.NET MVC, где я использую LINQ to SQL для доступа к моей базе данных SQL Server.В моей базе данных есть следующие таблицы:

Сообщений :

  • PostID - int, PK, идентификатор
  • Текст - nvarchar (MAX)
  • PublishDate - дата и время
  • и т. Д.

PostTags :

  • PostTagID - int, PK, удостоверение личности
  • PostID - FK для PK в таблице сообщений
  • TagID - FK для PK в таблице тегов

Теги :

  • TagID - int, PK, личность
  • TagName - varchar (100)

В каждом сообщении должен быть хотя бы 1 тег, поэтому это отношение от одного ко многим .

Я пытаюсь создать функцию поиска по тегам.Я хочу принять тег в качестве параметра и вернуть первые 25 сообщений с этим тегом , упорядоченные по убыванию PublishDate.Вот мой текущий код LINQ to SQL:

    var query = (from post in db.Posts
                join posttag in db.PostTags
                on post.PostID equals posttag.PostID
                where posttag.Tag.TagName==tag
                select post).OrderByDescending(p=>p.DateOfPublish).Take(25);

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

Как я могу улучшить свой код?Заранее спасибо!

1 Ответ

1 голос
/ 06 сентября 2010
var query = (from post in db.Posts 
            where(
                    from posttag in db.PostTags
                    join tags in db.Tags
                    on posttag.TagID equals tags.TagID   
                    where tags.TagName == tag select posttag.PostID
                ).Contains(post.PostID) 
            orderby post.PublishDate descending 
            select post).Take(25);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...