Подтвердить что ты не робот

Структура сущности, где, порядок и группа

Я использую следующий LINQ для выбора данных из таблицы:

(from m in entity.Results
where m.Group == 0 ||
m.Group == 1
orderby m.Points descending
select m);

Это дает мне результат всех пользователей, которые входят в группу 1 или 2. С этим я могу отображать точки, которые у них есть. Но это показывает мне те моменты, которые у них есть в группах 1 и 2 отдельно.

Как я могу сгруппировать их и отобразить общие очки? Поэтому вместо этого (что у меня есть):

user1 - group1 - 10
user1 - group2 - 7
user2 - group1 - 7
user2 - group2 - 5

Я хочу это:

user1 - total: 17
user2 - total: 12

Как мне настроить свой запрос, чтобы получить такой набор результатов?

4b9b3361

Ответ 1

Вам нужно сгруппировать пользователей, затем используйте Sum для вычисления TotalPoints:

from m in entity.Results
where m.Group == 0 || m.Group == 1
group m by m.User into g
let TotalPoints = g.Sum(m => m.Points)
orderby TotalPoints descending
select new { User = g.Key, Username = g.Key.Username, TotalPoints };

Ответ 2

entity.Results
      .Where(m => m.Group == 0 || m.Group == 1)
      .GroupBy(m => m.UserID)
      .Select(m => new { User = m.Key, TotalPoints = m.Sum(v => v.Points) })
      .OrderByDescending(m => m.TotalPoints);

Ответ 3

Привет, Vivendi используйте это (пожалуйста, отредактируйте в соответствии с вашим требованием)

var q = (from h in entity.Results
group h by new { h.UserID} into hh
select new {
    hh.Key.UserID,
    Score = hh.Sum(s => s.Points )
}).OrderByDescending(i => i.Points);

Выход

всего: 17

всего: 12

Ответ 4

Другой пример с более чем одной суммой и объединением

 from e in _context.LearnResults
 join c in _context.Country on e.CountryId equals c.CountryId
 where c.DomainId.Equals("xx")
 group e by e.Country.Name into newCountry
 let Approved = newCountry.Sum(e => e.Approved)
 let Total = newCountry.Sum(e => e.Total)
 select new LearnResults() { CountryName = newCountry.Key, Approved= Approved, Total=Total };