2011-06-06 56 views
8

我有一個LINQ到SQL查詢運行通過一個表,我想選擇3總和 - '匯率'和'AdditionalCharges'的總和,所以我有這樣的事情:LINQ到SQL - '總結'內選擇新

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

然而,顯然這會返回一個新行,每交付,這意味着我必須在事後總結起來 - 這似乎是非常低效的。有更容易的方法嗎?

回答

10

如果您使用的查詢語法,你可以這樣做以下

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

這是關我的頭頂,沒有測試

+0

剛剛寫出完全相同的代碼,當你也擊敗了我:) – NotJarvis 2011-06-06 07:48:50

+0

大聲笑,我鍵入更快,因爲在SO – NinjaNye 2011-06-06 07:49:44

8

不知道,但你可以嘗試出組輪空功能如下

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

我知道這是一個老問題,但嘿,我發現它,所以希望這將hel p別人......

你也可以做到這一點使用流利的語法:

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) 
       }); 

希望這可以幫助別人......

3

你應該能夠做到這一點:

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();