2016-10-30 125 views
0

嘿,我有一個linq查詢,我不能做任何意義。它從表中獲取特定公司(商店集合)的銷售數據。Linq查詢與多個GroupBy

銷售表是一個單獨的銷售項目的集合,多個銷售項目可以在一個賬單上。我需要做一個查詢,按商店排序一天價值的銷售額,然後統計該商店當天的總費用,並給出該商店當天的平均賬單。

這裏是什麼,我都開始至今

//get list of all stores bill count/average bill 

     FactSales.Where(d => d.DateKey >= 20130920).Where(d => d.DateKey <= 20130920) 
.Where(c => c.CompanyID == 4).GroupBy(g=>new{g.StoreID, g.BillID}).Select(g=>new{Store = g.Key.StoreID, Amount = g.Sum(a => a.Amount).Value }) 

這讓我所有的個人賬單的清單,但我怎麼得到的平均值和紙幣計數中,將包含一個列表中的每個店: storeID,平均帳單(所有商店帳單/帳單總數)和每個商店的帳單計數?

我一直在這一段時間,閱讀很多帖子,我必須錯過一些非常明顯的東西。

任何幫助將不勝感激!

回答

1
FactSales 
    // filter sale positions by day 
    .Where(d => d.DateKey >= 20130920 && d.DateKey <= 20130920) 
    // filter sale positions by company 
    .Where(c => c.CompanyID == 4) 
    // group values by store and bill so each row will contains all sales in one bill 
    .GroupBy(g=>new { g.StoreID, g.BillID }) 
    // calculate total amount for each bill 
    .Select(g=>new { Store = g.Key.StoreID, Bill = g.Key.BillID, Amount = g.Sum(a => a.Amount).Value }) 
    // group bills by store so each row will contains all bills with total amount for this store 
    .GroupBy(g => g.Store) 
    // calculate bills count and avg amount for this store 
    .Select(g => new { Store = g.Key, Bills = g.Count(), AvgBill = g.Average(x => x.Amount) }); 

我東西,g.Sum(a => a.Amount).Value不應包含Value屬性,你可以做g.Sum(a => a.Amount)

+0

感謝Vadim這是一個非常有用的答案! – Nate58

0

我THK這也將工作:

var result = FactSales 
        .Where(d => d.DateKey >= 20130920 && d.DateKey <= 20130920) 
        .Where(c => c.CompanyID == 4) 
        .GroupBy(t => new { t.StoreId }) 
        .Select(X => new 
         { 
          Store = X.Key.StoreId, 
          Sum = X.Sum(t => t.Amount), 
          Bills = X.Count(), 
          average = X.Sum(t => t.Amount)/X.Count() 
         }); 

不是。