2011-06-06 18 views
8

Tengo una consulta LINQ-to-SQL que se ejecuta a través de una tabla, que quiero seleccionar 3 sumas: las sumas de 'Tarifa' y 'AdditionalCharges', así que tengo algo como esto:LINQ-to-SQL - 'Suma' dentro de una nueva selección

var sums = from d in dc.Deliveries 
where d.TripDate == DateTime.Now 
select new 
{ 
    Rate = d.Rate, 
    AdditionalCharges = d.AdditionalCharges 
}; 

Sin embargo, obviamente, esto devuelve una nueva fila para cada entrega, lo que significa que tengo que sumarlos después - que parece bastante ineficiente. hay una manera mas facil?

Respuesta

10

Si utiliza la sintaxis de consulta se puede hacer algo como lo siguiente

var data = dc.Deliveries.Where(d => d.TripDate == DateTime.Now) 
var rateSum = data.Sum(d => d.Rate); 
var additionalCharges = data.Sum(d => d.AdditionalCharges); 

esto está fuera de la arriba de mi cabeza y no probado

+0

Estaba escribiendo exactamente el mismo código cuando me ganaste también :) – NotJarvis

+0

Jaja, escribo mucho más rápido desde que estoy en SO – NinjaNye

8

No es seguro, pero se puede probar la función de grupo adiós como a continuación

var sums = from d in dc.Deliveries 
where d.TripDate == DateTime.Now 
group d by new {d.Rate,d.AdditionalCharges,d.TripDate} into g 
select new 
{ 
    Rate = g.Sum(s => s.Rate), 
    AdditionalCharges = g.Sum(s => s.AdditionalCharges) 
}; 
0
var sums = from d in dc.Deliveries 
    where d.TripDate == DateTime.Now 
    Group by d.TripDate // or primary key 
    Into TotalRate = sum(d.Rate), 
    TotalAdditionalCharges = sum(d.AdditionalCharges) 
    Select TotalRate , TotalAdditionalCharges 
14

Sé que esta es una vieja pregunta, pero bueno, la encontré, así que espero que esto lo ayude p otra persona ...

También puede hacer esto utilizando la sintaxis de Fluido:

var sums = dc.Deliveries 
      .Where(d => d.TripDate == DateTime.Now) 
      .GroupBy(d => d.TripDate) 
      .Select(g => 
       new 
       { 
        Rate = g.Sum(s => s.Rate), 
        AdditionalCharges = g.Sum(s => s.AdditionalCharges) 
       }); 

Espero que esto ayude a alguien ...

3

Usted debe ser capaz de hacer esto:

DateTime d = DateTime.Now; 
var sums = from d in dc.Deliveries 
select new 
{ 
    Rate = dc.Deliveries.Where(n => n.TripDate == d).Sum(n => n.Rate), 
    AdditionalCharges = dc.Deliveries.Where(n => n.TripDate == d).Sum(n => n.AdditionalCharges) 
}; 

var result = sums.FirstOrDefault(); 
Cuestiones relacionadas