Я не могу это объяснить, поэтому я перейду к коду
У меня есть два объекта на 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 и исключает цикл 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-запрос из этого...