2
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 свои сообщения так:Как ограничить количество связанных данных с Include

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

Теперь я хочу, чтобы ограничить число сообщений, которые возвращаются, может кто-то показать mw, как это сделать?

Я использую EntityFramework 4.3.1

ответ

11

Это не представляется возможным с жадным нагрузкой (Include) - жаждущих возвратов погрузочных всегда все связанные данные. Вы должны использовать проекции на анонимный или новый тип (вы не можете использовать существующие отображенные объекты):

var cats = context.Cat.Select(c => new 
{ 
    Category = c, 
    Posts = c.Posts.OrderBy(p => p.Name).Take(10) 
}); 
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); 

Надеется, что это помогает.