IsNull в LINQ Sum () - PullRequest
       3

IsNull в LINQ Sum ()

0 голосов
/ 30 декабря 2018

У меня проблема с IsNull в LINQ:

db.WarehouseInputsDetails
    .Select(p => new WarehouseInputDetailsViewModel
    {
        Id = p.Id
        RemainingQuantity = p.Quantity - p.LoadingsDetails.Sum(n => n.Quantity)
    }).AsQueryable();

p.LoadingsDetails.Sum(n => n.Quantity) возможность NULL.Я хочу получить такой результат:

select Id, IsNull(Sum(Quantity),0) as Quantity from LoadingsDetails

Я пробовал что-то вроде:

db.WarehouseInputsDetails
    .Select(p => new WarehouseInputDetailsViewModel
    {
        Id = p.Id
        RemainingQuantity = p.LoadingDetails.First() == null ? p.Quantity : p.Quantity - p.LoadingsDetails.Sum(n => n.Quantity)
    }).AsQueryable();

Возвращает ошибки:

System.NotSupportedException: метод «Первый» может использоваться только в качестве конечной операции запроса.Попробуйте вместо этого использовать метод 'FirstOrDefault'.

Я пробовал что-то вроде этого:

db.WarehouseInputsDetails
    .Select(p => new WarehouseInputDetailsViewModel
    {
        Id = p.Id
        RemainingQuantity = (p.LoadingsDetails.Sum(n => n.Quantity) == DBNull.Value) ? p.Quantity : p.Quantity - p.LoadingsDetails.Sum(n => n.Quantity)
    }).AsQueryable();

ИЛИ

db.WarehouseInputsDetails
    .Select(p => new WarehouseInputDetailsViewModel
    {
        Id = p.Id
        RemainingQuantity = p.LoadingsDetails.First().Quantity == DBNull.Value ? p.Quantity : p.Quantity - p.LoadingsDetails.Sum(n => n.Quantity)
    }).AsQueryable();

Вернуть ошибки:

Оператор '==' нельзя применить к операндам типа 'десятичный' и 'DBNull'

enter image description here

1 Ответ

0 голосов
/ 30 декабря 2018

Здесь вы можете использовать Any(), который проверит, есть ли строка для LoadingDetails, если да, то суммируйте Quantity для LoadingDetails:

RemainingQuantity = p.LoadingDetails.Any()  ? 
                p.Quantity - p.LoadingsDetails.Sum(n => n.Quantity) : 
                p.Quantity 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...