gpt4 book ai didi

entity-framework-4 - Entity Framework 4 - 如何限制另一个表中子元素的数量(通过外键连接)

转载 作者:行者123 更新时间:2023-12-04 07:56:19 26 4
gpt4 key购买 nike

我有两个数据模型BlogPost。 BlogId 是Post

上的外键
public class Blog
{
public int ID { get; set; }

public string Title { get; set; }

public virtual ICollection<Post> Posts { get; set; }

...
}


public class Post
{
public int ID { get; set; }

public virtual int BlogId { get; set; }

public string Title { get; set; }

...
}

现在这工作正常,我的存储库很高兴并按预期从数据库中提取所有内容。

我的问题是 - 有没有办法限制检索到的帖子的数量。也许是一些 LINQ 魔法?

这是我当前在存储库中的方法:

public Business FindBlog(int id)
{
return this.context.Get<Blog>().SingleOrDefault(x => x.ID == id);
}

最佳答案

不幸的是,EFv4 没有提供简单的方法来限制导航属性的返回记录数。

如果您使用 EntityObject您可以使用类似的派生实体:

var blog = context.Blogs
.Single(b => b.Id == blogId);

var posts = blog.Posts
.CreateSourceQuery()
.OrderByDescending(p => p.Date)
.Take(numberOfRecords)
.ToList();

如果您使用的是 POCO,则必须为此执行单独的查询(如果是代理 POCO,您可以从 convert navigation propertyEntityCollection<Post> 来访问 CreateSourceQuery):

var blog = context.Blogs
.Single(b => b.Id == blogId);

var posts = context.Posts
.Where(p => p.BlogId == blogId)
.OrderByDescending(p => p.Date)
.Take(numberOfPosts)
.ToList();

EFv4.1 和 DbContext API 提供了只加载有限数量的相关实体的方法:

var blog = context.Blogs
.Single(b => b.Id == blogId);

context.Entry(blog)
.Collection(b => b.Posts)
.Query()
.OrderByDescending(p => p.Date)
.Take(numberOfPosts)
.Load();

编辑:

您可以使用投影在单个查询中完成:

var blog = context.Blogs
.Where(b => b.Id == blogId)
.Select(b => new
{
Blog = b,
Posts = b.Posts
.OrderByDescending(p => Date)
.Take(numberOfRecords)
})
.SingleOrDefault()

请注意,您必须从匿名类型的第二个参数访问帖子。

关于entity-framework-4 - Entity Framework 4 - 如何限制另一个表中子元素的数量(通过外键连接),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5602371/

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