Как использовать LINQ для получения списка из другого объекта с определенным количеством элементов

1

Я не могу это объяснить, поэтому я перейду к коду

У меня есть два объекта на EF

public class Book
{
    public int BookID { get; set; }
    public string Name { get; set; }
    public string Description { get; set; }
    public int CategoryID { get; set; }

    public virtual Category Category { get; set; }
}

public class Category
{
    public int CategoryID { get; set; }
    public string CategoryName { get; set; }

    public virtual ICollection<Book> Books { get; set; }
}

Я хочу использовать LINQ для получения списка категорий, но каждая категория имеет определенное количество книг.

Я так делаю это

List<Category> model = new List<Category>();

var categories = db.Categories.Include(b => b.Books);
foreach (Category cat in categories)
{
     Category newCat = new Category();
     newCat = cat;
     newCat.Books = cat.Books.Take(4).ToList();
     model.Add(newCat);
}

Я пытаюсь сделать код короче, могу ли я избежать цикла foreach, используя LINQ?

Теги:
linq
entity-framework

1 ответ

1
Лучший ответ

Непроверенный, но как насчет этого? Вам нужно будет указывать каждое свойство в категориях по отдельности, но оно помещает его в один оператор LINQ и исключает цикл foreach и несколько вызовов ToList.

var model = db.Categories
              .Include(b => b.Books)
              .Select(c => new Category
                           {
                               Property1 = c.Property1,
                               Property2 = c.Property2,
                               ...,
                               Books = c.Books.Take(4)
                           })
              .ToList();

Предполагая, что EF может генерировать действительный SQL-запрос из этого...

  • 1
    Это сработало, спасибо! Единственная проблема заключается в том, что по мере роста сущности Category я получу еще больше кода, чем раньше. Во всяком случае, это то, что я искал.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню