Как получить сумму столбца с помощью Entity Framework LINQ - PullRequest
0 голосов
/ 03 июня 2019

Я хочу получить СУММУ столбца «Вес» с помощью LINQ и сохранить в списке.Ниже приведен код операции объединения двух столбцов.

var que = (from o in db.OrderPlans.Where(i => i.DemandId == _demandId)
join f in db.Fabrics
on o.FabricId equals f.Id
select new
{
    f.Id,
    f.Name,
    o.Width,
    f.Type,
    o.GSM,
    o.Weight
}).ToList();

Ответы [ 3 ]

1 голос
/ 03 июня 2019

при условии, что код, который вы опубликовали выше, работает, и давайте представим, что вы сохранили его в переменной с именем joinList (и вам нужна сумма Weight для групп, образованных различными комбинациями всех других полей):

var groupedList = joinedList.GroupBy(grp => new {
                             grp.Id,
                             grp.Name,
                             grp.Width,
                             grp.Type,
                             grp.GSM
}).Select(grp => new {
                             grp.Key.Id,
                             grp.Key.Name,
                             grp.Key.Width,
                             grp.Key.Type,
                             grp.Key.GSM,
                             SumOfWeight = grp.Sum(w => w.Weight)
}).ToList();
0 голосов
/ 05 июня 2019

Мне кажется, что у вас есть отношение один-ко-многим между 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(),
    });
0 голосов
/ 04 июня 2019

В конце вашего кода добавьте это .Groupby(w => w.Weight).Convert< int >(g=> g.Sum());

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...