Я пытаюсь выполнить объединение внутри группового соединения с помощью Linq.Вот сценарий - для каждого элемента строки в заказе я хочу получить некоторые атрибуты из варианта для этой позиции (например, варианты вариантов и imageid, которые хранятся в базах данных вариантов и продуктов).я хочу присоединиться к lineitem, вариантам и базам данных продуктов, чтобы получить эту дополнительную информацию для lineitem, а затем объединить этот lineitem с таблицей заказов.Я сделал это и получил желаемый результат, используя два запроса, но я не уверен, сколько запросов к базе данных выполняется.И в первом случае (т. Е. В соединении предел не может быть указан, поэтому я просто хочу убедиться, что первый запрос в приведенном ниже коде оценивается только при вызове .ToListAsync ()).Это правильный способ сделать это?Любая помощь будет принята с благодарностью!
public async Task<dynamic> GetOrdersAsync(User user, int pageNumber = 1)
{
var perPage = 10;
var lineItemAndVariant = from l in _context.LineItems
join v in _context.Variants
on l.EcomPlatformVariantId equals v.EcomPlatformVariantId
join p in _context.Products
on v.ProductId equals p.Id
where p.UserId == user.Id
select new
{
l.Id,
l.OrderId,
l.Price,
l.Quantity,
l.EcomPlatformLineItemId,
l.EcomPlatformVariantId,
l.Title,
ImageId = v.ImageId ?? p.ThumbnailId, // for adding image
p.MyVendor,
p.MyVendorId,
v.Option1,
v.Option2,
v.Option3,
p.VariantOption1Label,
p.VariantOption2Label,
p.VariantOption3Label
};
var orders = await _context.Orders
.Where(o => o.UserId == user.Id)
.OrderByDescending(o => o.Id)
.Skip(perPage * (pageNumber - 1)).Take(perPage)
.GroupJoin(lineItemAndVariant, o => o.Id, l => l.OrderId,
(o, lineItems) => new
{
o.Id,
o.EcomPlatformOrderId,
o.CustomerEmail,
o.FirstName,
o.LastName,
o.Address1,
o.Address2,
o.City,
o.Company,
o.Country,
o.Currency,
o.OrderNumber,
o.Phone,
o.Province,
o.TotalPrice,
o.UserId,
o.Zip,
o.CreatedAt,
LineItems = lineItems
})
.AsNoTracking().ToListAsync();
return orders;
}