У меня есть таблица транзакций и таблица клиентов, как показано ниже:
public class Customer
{
public string Id{ get; set; }
public string Name { get; set; }
public string Password { get; set; }
}
public class SalesTransaction
{
public int Id { get; set; }
public decimal Amount { get; set; }
public string CustomerId{ get; set; }
}
Теперь мне нужно получить список общей суммы транзакций по каждому клиенту и представить его с именем клиента и общая сумма транзакции в списке
Я пробовал следующий синтаксис метода linq
await _context.SalesTransactions
.GroupBy(w=>w.CustomerId)
.OrderByDescending(g=>g.Sum(t=>t.Amount))
.ToListAsync();
, но когда я пытаюсь запустить его, я получаю следующую ошибку
InvalidOperationException: GroupBy на стороне клиента не поддерживается.
Я также пробовал следующий синтаксис запроса
var TransactionSummary = await (from w in _context.WalletTransactions
//join c in _context.Customers
on w.CustomerId equals c.Id
group w by w.CustomerId
into ct
//from c in ct.DefaultIfEmpty()
select new
{
ID=ct.Key,
TransactionAmount=ct.Sum(a=>a.Amount),
// ct.Name
}).ToListAsync();
, но Sum (w.Amount) показывает ошибку, говоря, что " Sum не существует в текущем контексте ".
Я также не уверен, где разместить предложение группировки в синтаксисе запроса, чтобы добиться группировки результата по полю Customer.Id.
Обратите внимание, что строки, которые я закомментировал, являются пунктами, которые я хочу sh добавить, но не уверен, где и как их добавить, он
Я sh, чтобы получить правильный способ go об этом .
Спасибо
РЕШЕНИЕ НАЙДЕНО: Благодаря ответу от @ Asherguru
Мне просто пришлось немного изменить его, чтобы добиться желаемого результата
Работали следующие
var transactions= (await _context.SalesTransactions.Include(x => x.Sender).ToListAsync())
.GroupBy(w => new { w.CustomerId, w.Sender })
.Select(x => new
{
CustomerID= x.Key.CustomerId,
x.Key.Customer,
Amount = x.Sum(w => w.Amount)
}).ToList();