Если результат <0 в выберите новый linq - PullRequest
0 голосов
/ 27 мая 2020

У меня следующая проблема, у меня следующий код

var creditos = from c in db.creditos 
  join s in db.solicitudDelCliente on c.SolicitudDelClienteID equals s.ID
  join cl in db.cliente on s.ClienteID equals cl.ID
  where c.Eliminado != true && cl.Eliminado != true && c.NegocioID == negocio_id
  select new
  {
      c.ID,
      cl.NumeroCliente,
      c.Consecutivo,
      NegocioID = negocio_id,
      cl.NombreCompleto,
      c.FechaAlta,
      c.CapitalPrestado,
      c.Vencido,
      c.Quebranto,
      c.Juridico,
      c.Liquidado,
      c.Reestructura,
      c.Eliminado,
      c.Estatus,
      CapitalPagado = db.movimientos.Where(mm=>mm.CreditoID == c.ID && mm.Eliminado != true && mm.DepositoMovimientoID != null && mm.CategoriaMovimientosID == 2).Select(mm=>mm.Monto).DefaultIfEmpty(0).Sum(),
      InteresesPagados = db.movimientos.Where(mm => mm.CreditoID == c.ID && mm.Eliminado != true && mm.DepositoMovimientoID != null && mm.CategoriaMovimientosID == 4).Select(mm => mm.Monto).DefaultIfEmpty(0).Sum(),
      SaldoInsoluto = db.movimientos.Where(mm => mm.CreditoID == c.ID && mm.CategoriaMovimientosID == 1).Select(mm => mm.Monto).DefaultIfEmpty(0).Sum() -
                    db.movimientos.Where(mm => mm.CreditoID == c.ID && mm.Eliminado != true && mm.DepositoMovimientoID != null && mm.CategoriaMovimientosID == 2).Select(mm => mm.Monto).DefaultIfEmpty(0).Sum(),
      SaldoDeudorTotal = (db.movimientos.Where(mm => mm.CreditoID == c.ID
           && mm.Eliminado != true 
           && mm.DepositoMovimientoID == null 
           && mm.CategoriaMovimientosID != 2)
        .Select(mm => mm.Monto).DefaultIfEmpty(0).Sum() 
          -  db.movimientos.Where(mm => mm.CreditoID == c.ID
             && mm.Eliminado != true 
             && mm.DepositoMovimientoID != null 
             && mm.CategoriaMovimientosID != 1)
        .Select(mm => mm.Monto).DefaultIfEmpty(0).Sum()), 
      Migrado = c.Migracion
  };

В некоторых результатах запроса значение «SaldoDeudorTotal» отрицательное, я хочу контролировать значение, что если значение равно -0, вернуть 0 ноль.

Ответы [ 2 ]

0 голосов
/ 27 мая 2020
var creditos = from c in db.creditos 
  join s in db.solicitudDelCliente on c.SolicitudDelClienteID equals s.ID
  join cl in db.cliente on s.ClienteID equals cl.ID
  where c.Eliminado != true && cl.Eliminado != true && c.NegocioID == negocio_id
  let total = (db.movimientos.Where(mm => mm.CreditoID == c.ID
           && mm.Eliminado != true 
           && mm.DepositoMovimientoID == null 
           && mm.CategoriaMovimientosID != 2)
        .Select(mm => mm.Monto).DefaultIfEmpty(0).Sum() 
          -  db.movimientos.Where(mm => mm.CreditoID == c.ID
             && mm.Eliminado != true 
             && mm.DepositoMovimientoID != null 
             && mm.CategoriaMovimientosID != 1)
        .Select(mm => mm.Monto).DefaultIfEmpty(0).Sum())

  select new
  {
      c.ID,
      cl.NumeroCliente,
      c.Consecutivo,
      NegocioID = negocio_id,
      cl.NombreCompleto,
      c.FechaAlta,
      c.CapitalPrestado,
      c.Vencido,
      c.Quebranto,
      c.Juridico,
      c.Liquidado,
      c.Reestructura,
      c.Eliminado,
      c.Estatus,
      CapitalPagado = db.movimientos.Where(mm=>mm.CreditoID == c.ID && mm.Eliminado != true && mm.DepositoMovimientoID != null && mm.CategoriaMovimientosID == 2).Select(mm=>mm.Monto).DefaultIfEmpty(0).Sum(),
      InteresesPagados = db.movimientos.Where(mm => mm.CreditoID == c.ID && mm.Eliminado != true && mm.DepositoMovimientoID != null && mm.CategoriaMovimientosID == 4).Select(mm => mm.Monto).DefaultIfEmpty(0).Sum(),
      SaldoInsoluto = db.movimientos.Where(mm => mm.CreditoID == c.ID && mm.CategoriaMovimientosID == 1).Select(mm => mm.Monto).DefaultIfEmpty(0).Sum() -
                    db.movimientos.Where(mm => mm.CreditoID == c.ID && mm.Eliminado != true && mm.DepositoMovimientoID != null && mm.CategoriaMovimientosID == 2).Select(mm => mm.Monto).DefaultIfEmpty(0).Sum(),
      SaldoDeudorTotal = total < 0 ? 0 : total, 
      Migrado = c.Migracion
  };
0 голосов
/ 27 мая 2020

вы можете использовать расширение

public static class MyExtension 
{
    public static int ToPositiveInt(this int value)
    {
        if (value < 0)
            return 0;
        else
            return value
    }
}

и вызывать его в конце вашего условия SaldoDeudorTotal

SaldoDoeudorTotal = (db.movimientos.Where(mm => mm.CreditoID == c.ID
           && mm.Eliminado != true 
           && mm.DepositoMovimientoID == null 
           && mm.CategoriaMovimientosID != 2).ToPositiveInt()
...