Me gustaría traducir el siguiente código SQL en LINQ:devolver múltiples columnas agregadas en LINQ
SELECT
(Select count(BidID)) as TotalBidNum,
(Select sum(Amount)) as TotalBidVal
FROM Bids
He intentado esto:
from b in _dataContext.Bids
select new { TotalBidVal = b.Sum(p => p.Amount), TotalBidNum = b.Count(p => p.BidId) }
pero consigo un error pujas" no contiene una definición para "Suma" y no se pudo encontrar ningún método de extensión "Suma" aceptando un primer argumento de tipo "Ofertas"
¿Cómo puedo hacer esto en LINQ?
Gracias
finales:
La respuesta final fue:
var ctx = _dataContext.Bids;
var itemsBid = (from b in _dataContext.Bids
select new { TotalBidVal = ctx.Sum(p => p.Amount), TotalBidNum = ctx.Count() }).First();
Eso solucionó el error (aunque parece como un paso innecesario - ¿por qué es ¿Lo necesitaba?). Hubo un problema con mi Cuenta (p => p.BidID) - un error que p.BidID no era booleano. Lo reemplacé con Count() y ahora la consulta devuelve la suma correcta y el recuento, pero no como una sola fila. La misma fila una y otra vez. Supongo que tantas veces como filas hay en la tabla de ofertas. ¿Cómo puedo devolver una sola fila como en mi consulta SQL original? – BKahuna
@BKahuna su consulta dice "de b en _dataContext.Bids" eso es una iteración. y no obtendrás un resultado aunque intentes calcular solo la suma y el recuento. Puede finalizar la expresión lambda llamando a First(). que te dará solo un resultado como lo hice. – scartag
@BKahuna por favor, desplácese hasta el final de mi respuesta y vea la última llamada que realizo. llamo al método First() que asegurará que obtenga una sola fila de vuelta (el sql generado es Top (1)) – scartag