У меня есть запрос, который я преобразовал в выражение LINQ. Но бросает исключение Null.sql to LINQ с левой группой join by и sum() throws exception
Цель: Тип платежа может иметь три значения (0,1,2). Мне нужно запросить общую сумму суммы для всей валюты для всех трех типов PaymentType. Также, если запись для определенной валюты не существует ни для одного из трех значений paymentType. Сумма должна отображать ее как ноль.
Структура таблицы:
Currency varchar(10),
PaymentType(int),
amount(decimal)
Запрос:
Linq Expression:
var temp = _db.Payments.Select(c => c.PaymentType) .Distinct()
.SelectMany(c => _db.Payments.Select(a => a.Currency).Distinct(),
(PaymentType, Currency) => new { PaymentType, Currency }).ToList();
var data = from p in temp join c in _db.Payments on new {
p.PaymentType, p.Currency } equals new { c.PaymentType, c.Currency }
into j1 from j2 in j1.DefaultIfEmpty() group j2 by new {
p.PaymentType, p.Currency } into grouped select new { paymenttype =
grouped.Key.PaymentType, currency = grouped.Key.Currency, amount =
grouped.Sum(t => (decimal?)t.Amount ?? 0) };
Но это дает мне ошибку "Ссылка на объект" из-за NULL исключения в заявлении SelectMany объявляя новое.
t => (decimal?)t.Amount ?? 0
Может кто-то помочь, где я делаю неправильно.
Мое предположение, что либо p.PaymentType или p.Currency является NULL – Ako
@Ako Да, вы правы. Позвольте мне объяснить u образцом. скажем, валюта доллара США имеет значения с paytype 0,1, но не с 2. Теперь мое требование - мне нужно USD, 2 и сумма суммы как 0. Поэтому я создал надмножество в своем темпе, а затем попытался присоединиться к нему. Итак, теперь для USD, 2 в таблице нет суммы и, следовательно, null. Не знаете, как справиться с этим. – user3182464