LINQ-to-SQL - ' Sum ' внутри выбранного нового
У меня есть запрос LINQ-to-SQL, который проходит через таблицу, которую я хочу выбрать 3 sum-суммы "Rate" и "AdditionalCharges", поэтому у меня есть что-то вроде этого:
var sums = from d in dc.Deliveries
where d.TripDate == DateTime.Now
select new
{
Rate = d.Rate,
AdditionalCharges = d.AdditionalCharges
};
однако, очевидно, это возвращает новую строку для каждой доставки, что означает, что я должен суммировать их позже - что кажется довольно неэффективным. Есть ли более простой способ?
5 ответов
Если вы используете синтаксис запроса вы можете делать нечто вроде следующего
var data = dc.Deliveries.Where(d => d.TripDate == DateTime.Now)
var rateSum = data.Sum(d => d.Rate);
var additionalCharges = data.Sum(d => d.AdditionalCharges);
это с моей головы и не проверено
Я знаю, что это старый вопрос, но я нашел его, так что надеюсь, это поможет кто-то другой...
вы также можете сделать это, используя свободный синтаксис:
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)
});
надеюсь, это кому-то поможет...
Не уверен, но вы можете попробовать функцию group bye, как показано ниже
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)
};
вы должны быть в состоянии сделать это:
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();
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