Как ограничить количество связанных данных с помощью Включить - PullRequest
6 голосов
/ 03 марта 2012
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);

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

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

Ответы [ 2 ]

16 голосов
/ 03 марта 2012

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

var cats = context.Cat.Select(c => new 
{ 
    Category = c, 
    Posts = c.Posts.OrderBy(p => p.Name).Take(10) 
});
1 голос
/ 03 марта 2012

Вы не можете использовать проекции с методом 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);

Надеюсь, это поможет.

...