У нас есть таблица предметов, к которой может быть прикреплено несколько изображений. Я хочу создать конечную точку, которая возвращает все элементы, а также количество изображений, прикрепленных к каждому элементу в виде json.
Я делаю это с помощью следующего оператора linq:
var items = context.Items.AsNoTracking ();
return Json (await items.Select (item => new {
item = item,
numImages = item.Images.Count (),
}).ToListAsync ());
Это работает, но это невероятно медленно, потому что EF генерирует отдельную инструкцию SQL для каждого элемента, например:
SELECT COUNT(*) FROM `Images` AS `q0` WHERE @_outer_IdImages = `q0`.`idImages`
Как я могу построить свой linq так, чтобы генерировался только один запрос, например:
SELECT idItems, name, (SELECT COUNT(*) FROM Images WHERE idItems = i.idItems) FROM Items i;