#c# #linq-to-sql #sum
#c# #linq-to-sql #сумма
Вопрос:
У меня есть запрос LINQ-to-SQL, который выполняется через таблицу, в которой я хочу выбрать 3 суммы — суммы ‘Rate’ и ‘AdditionalCharges’, поэтому у меня есть что-то вроде этого:
var sums = from d in dc.Deliveries
where d.TripDate == DateTime.Now
select new
{
Rate = d.Rate,
AdditionalCharges = d.AdditionalCharges
};
Однако, очевидно, что это возвращает новую строку для каждой доставки, что означает, что я должен суммировать их впоследствии, что кажется довольно неэффективным. Есть ли более простой способ?
Ответ №1:
Я знаю, что это старый вопрос, но, эй, я нашел его, так что, надеюсь, это поможет кому-то еще…
Вы также можете сделать это, используя свободный синтаксис:
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)
});
Надеюсь, это кому-то поможет…
Ответ №2:
Если вы используете синтаксис запроса, вы можете сделать что-то вроде следующего
var data = dc.Deliveries.Where(d => d.TripDate == DateTime.Now)
var rateSum = data.Sum(d => d.Rate);
var additionalCharges = data.Sum(d => d.AdditionalCharges);
это не укладывается у меня в голове и не тестировалось
Комментарии:
1. Я просто писал точно такой же код, когда ты тоже меня победил 🙂
2. Лол, я печатаю намного быстрее, так как на SO
Ответ №3:
Не уверен, но вы можете попробовать функцию группового прощания, как показано ниже
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)
};
Ответ №4:
Вы должны быть в состоянии сделать это:
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();
Ответ №5:
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