C# 连接是否适合在LINQ到SQL中实现此类功能?
我正在编写一个ASP.NETMVC站点,在这里我使用LINQtoSQL访问我的SQLServer数据库。在我的数据库中,我有以下表格: 帖子:C# 连接是否适合在LINQ到SQL中实现此类功能?,c#,sql,linq,linq-to-sql,join,C#,Sql,Linq,Linq To Sql,Join,我正在编写一个ASP.NETMVC站点,在这里我使用LINQtoSQL访问我的SQLServer数据库。在我的数据库中,我有以下表格: 帖子: PostID-int、PK、identity 文本-nvarchar(最大值) PublishDate-日期时间 等等 PostTags: PostTagID-int、PK、identity PostID-FK到PK到Posts表 TagID-FK到PK到标记表 标签: TagID-int、PK、identity 标记名-varchar(100
- PostID-int、PK、identity
- 文本-nvarchar(最大值)
- PublishDate-日期时间
- 等等
- PostTagID-int、PK、identity
- PostID-FK到PK到Posts表
- TagID-FK到PK到标记表
- TagID-int、PK、identity
- 标记名-varchar(100)
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);
然而,我认为我的代码是错误的,因为它似乎不尊重POST和标记之间的单对多关系
如何改进代码?提前谢谢 不要简单地说“它不起作用”,你应该发布你的预期结果和你实际得到的。@Adam我还没有测试代码,但我很确定它不会起作用,因为PostTags中可能有多条记录具有相同的PostID。我的钱在数据上。您能给我们一些示例记录并说明返回了哪些记录(如果有)吗?您描述的是一种多对多关系,因为一篇文章可以与多个标记相关,反之亦然——一个标记可以与多篇文章相关。@OMGPonies true,posts to tags是多对多的;然而,对PostTags的发布是单对多的,不是吗?与其简单地说“它不起作用”,你应该发布你的预期结果和你实际得到的。@Adam我还没有测试代码,但我很确定它不会起作用,因为PostTags中可能有多条记录具有相同的PostID。我的钱在数据上。您能给我们一些示例记录并说明返回了哪些记录(如果有)吗?您描述的是一种多对多关系,因为一篇文章可以与多个标记相关,反之亦然——一个标记可以与多篇文章相关。@OMGPonies true,posts to tags是多对多的;然而,PostTags的帖子是一对多的,对吧?太棒了,谢谢,现在就去试试吧。顺便说一下,VisualStudio抱怨“on…”行应该是“on posttag.TagID等于tags.TagID”。@Maxim Zaslavsky真的吗?对我来说,这是个大新闻。谢谢(已修复)。我看不出这怎么可能比原始代码更好,除非
PostTags
可以有重复记录(在这种情况下,您的设计有问题)。太棒了,谢谢,现在就来试试。顺便说一下,VisualStudio抱怨“on…”行应该是“on posttag.TagID等于tags.TagID”。@Maxim Zaslavsky真的吗?对我来说,这是个大新闻。谢谢(已修复)。我看不出这怎么可能比原始代码更好,除非PostTags
可以有重复记录(在这种情况下,您的设计有问题)。
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);