Мне кажется, что у вас есть отношение один-ко-многим между Fabric
и OrderPlan
: каждый Fabric
имеет ноль или более OrderPlans
, каждый OrderPlan
принадлежит ровно одному Fabric
, а именно Fabric
, на который ссылается внешний ключ.
Мне кажется, что вы хотите несколько Fabric
свойств с (несколькими свойствами) их OrderPlans
и общим весом этих OrderPlans
.
Всякий раз, когда у вас есть отношение «один ко многим» или «многие ко многим», и вы хотите получить «предметы со своими подпунктами», например, «Школы со своими учениками» или «Клиенты со своими заказами» или «Заказы со своими» Строки заказа, вы используете Queryable.GroupJoin вместо стандартного объединения.
// GroupJoin Fabrics with some of their OrderPlans:
var result = dbContext.Fabrics
.GroupJoin(dbContext.OrderPlans.Where(orderPlan => ...)
fabric => fabric.Id, // from each Fabric take the primary key
orderPlan => orderPlan.FabricId, // from each OrderPlan take the foreign key
// ResultSelector: take every Fabric with all his matching OrderPlans to make one new object:
(fabric, orderPlansOfthisFabric) => new
{
// Select the Fabric properties you want
Id = fabric.Id,
Name = fabric.Name,
Type = fabric.Type,
OrderPlans = orderPlansOfThisFabric.Select(orderPlan => new
{
// Select the OrderPlan properties you want:
Width = orderPlan.Width,
Gsm = orderPlan.Gsm,
}
// Weight: calculate the sum of all OrderPlans of this Fabric:
Weight = orderPlansOfThisFabric
.Select(orderPlan => orderPlan.Weight)
.Sum(),
});