Mcbaloo Ответов: 2

Как использовать group by, а также sum для записи базы данных с помощью linq


у меня есть структура таблицы, которая выглядит так

listed_companyid       numberof_units              userid
-----------------     -----------------        -----------------
       2                     4                        2
       2                     2                        2
       1                     6                        2
       5                     3                        3


я хочу иметь возможность достичь приведенного ниже результата с помощью моего запроса, когда я группирую по listed_companyid идентификатор пользователя
для userid = 2
total_unit = 12

кроме того, я тоже хочу иметь что-то подобное
для userid =2
listed_companyid = 2 , всего= 6
listed_companyid = 1 , всего = 6

Что я уже пробовал:

var  listed = dbContext.listedCompanies.ToList();
    var stock = dbContext.stocks.Where(m=>m.userid == 2).ToList();
    var result = (from s in stock
                              join l in listed on s.listed_companyid equals l.id group s  by new { s.listed_companyid } into g select new
                              {
                                  g.Key,
                                  total_unit = g.Sum(s => s.numberof_units)
                              });

2 Ответов

Рейтинг:
2

koklimabc

dbContext.YourTable.groupby(p => p.listed_compnyid).(p => p.sum(px => px.select(px.number_ofunits))).FirstOrDefault();


Рейтинг:
11

Maciej Los

Взгляните на пример:

var data = new[] {
	new {listed_companyid = 2, numberof_units= 4, userid =2},
	new {listed_companyid = 2, numberof_units= 2, userid =2},
	new {listed_companyid = 1, numberof_units= 6, userid =2},
	new {listed_companyid = 5, numberof_units= 3, userid =3}
	};

var result = data.GroupBy(x=>x.userid)
	.Select(grp=> new
    {
        userid = grp.Key,
        totalunits = grp.Sum(x=>x.numberof_units)
    })
    .ToList();
result.Dump();

var result2 = data.GroupBy(x=>x.userid)
	.Select(grp=> new
    {
        userid = grp.Key,
		details = grp.GroupBy(x=>x.listed_companyid)
			.Select(subgrp=> new
				{
					companyid = subgrp.Key,
					units = subgrp.Sum(y=>y.numberof_units) 
				})
			.ToList()
    })
    .ToList();
result2.Dump();


Результат:
userid totalunits
2      12 
3      3


Результат № 2


идентификатор пользователя подробности
companyid единицы
2 2 6
1 6
3 5 3


Удачи вам!