gpt4 book ai didi

linq-to-sql - 如何加载多对多 LINQ 查询?

转载 作者:行者123 更新时间:2023-12-04 15:28:44 27 4
gpt4 key购买 nike

我有以下(非常标准的)表结构:

Post <-> PostTag <-> Tag

假设我有以下记录:
PostID Title
1, 'Foo'
2, 'Bar'
3, 'Baz'

TagID Name
1, 'Foo'
2, 'Bar'

PostID TagID
1 1
1 2
2 2

换句话说,第一篇文章有​​两个标签,第二篇有一个,第三篇没有。

我想在一个查询中加载所有帖子及其标签 但一直无法找到正确的运算符组合。我已经能够加载仅带有标签的帖子或当有多个标签时重复的帖子。

鉴于上述数据库, 我想在 Post 对象的集合属性中接收三个帖子及其标签(如果有) .有可能吗?

谢谢

最佳答案

好极了!有效。

如果有人遇到同样的问题,这就是我所做的:

public IList<Post> GetPosts(int page, int record)
{
var options = new DataLoadOptions();
options.LoadWith<Post>(p => p.PostTags);
options.LoadWith<PostTag>(pt => pt.Tag);
using (var db = new DatabaseDataContext(m_connectionString))
{
var publishDateGmt = (from p in db.Posts
where p.Status != PostStatus.Hidden
orderby p.PublishDateGmt descending
select p.PublishDateGmt)
.Skip(page * record)
.Take(record)
.ToList()
.Last();
db.LoadOptions = options;
return (from p in db.Posts
where p.Status != PostStatus.Closed
&& p.PublishDateGmt >= publishDateGmt
orderby p.PublishDateGmt descending
select p)
.Skip(page * record)
.ToList();
}
}

这仅执行两个查询并为每个帖子加载所有标签。

我们的想法是获取一些值来限制我们需要的最后一篇文章的查询(在这种情况下,PublishDateGmt 列就足够了),然后使用该值而不是 Take() 来限制第二个查询。

感谢您的帮助西罗科。

关于linq-to-sql - 如何加载多对多 LINQ 查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/79939/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com