我正在编写一个ASP.NET MVC站点,我正在使用LINQ to SQL访问我的SQL Server数据库。在我的数据库中,我有以下表格:
帖子 :
PostTags :
标签 :
每个帖子必须至少有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);
但是,我认为我的代码是错误的,因为它似乎不尊重帖子和标签之间的单对多关系。
如何改进我的代码?提前谢谢!
答案 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);