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
答案 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);
希望它有所帮助。