如何使用Include限制相关数据的数量

时间:2012-03-03 10:40:42

标签: entity-framework entity-framework-4 include ef-code-first

class Cat
{
   public int CatID;
   public string Name;
   public ICollection<Post> Posts;
}
class Post
{
   public int PostID;
   public string Name

   public int CatID;
   public virtual Cat Parent;
}

我想用他们的帖子加载所有的Catergories所以:

var cats = context.Cat.Include(c => c.Posts);

现在我想限制返回的帖子数量,有人可以告诉你如何做到这一点吗?

我正在使用EntityFramework 4.3.1

2 个答案:

答案 0 :(得分:15)

切换加载(Include)是不可能的 - 急切加载会始终返回所有相关数据。您必须将投影用于匿名或新类型(您不能使用现有的映射实体):

var cats = context.Cat.Select(c => new 
{ 
    Category = c, 
    Posts = c.Posts.OrderBy(p => p.Name).Take(10) 
});

答案 1 :(得分:1)

您无法使用Include()方法投影,但请注意,在下面的查询中,您可以使用帖子的名称字段限制返回的类别数。

using (var context = new YourContext())
{
    var categories = from c in context.Categories.Include("Posts")
                    where c.Posts.Any((p)=>p.Name == "Linq")
                    select c;
}

你也可以这样做:

context.Categories
       .Select(c => new { 
                         Category = c, 
                         Posts = c.Posts.Where(p => p.Name == "Linq") 
       }).AsEnumerable()
       .Select(cp => cp.Category);

希望它有所帮助。