是否适合在LINQ to SQL中实现此类功能?

时间:2010-09-05 22:12:19

标签: c# sql linq linq-to-sql join

我正在编写一个ASP.NET MVC站点,我正在使用LINQ to SQL访问我的SQL Server数据库。在我的数据库中,我有以下表格:

帖子

  • PostID - int,PK,identity
  • 文字 - nvarchar(MAX)
  • PublishDate - datetime

PostTags

  • PostTagID - int,PK,identity
  • PostID - FK到PK到帖子表
  • TagID - FK到PK到标签表

标签

  • TagID - int,PK,identity
  • 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 个答案:

答案 0 :(得分:1)

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);