2012-11-20 29 views
3

我有ForecastData列表,它看起來像這樣:很難找到重複表達式

public class ForecastData 
{ 
    public string SalesID {get;set;} 
    public string Customer {get;set;} 
    public string Vendor {get;set;} 
    public string Division {get;set;} 
    public int Year {get;set;} 
    public decimal Amount {get;set;} 
} 

我需要顯示每個不同的「SalesID」的列表中爲每個「客戶」有量> 0今年是今年。

目前,我是按客戶進行分組的,但由於我的數據集中可能有多個「金額」相同的客戶和SalesID,所以我沒有得到我期望的結果。我的研究結果表明:

  1. customer1表用戶1 $ 100
  2. customer1表用戶1 $ 200
  3. customer1表用戶1 $ 300
  4. customer1表用戶2 $ 100
  5. customer1表用戶2 $ 200

但我要的是

  1. customer1表用戶1 $ 600
  2. customer1表用戶2 $ 300

這裏是我的表達:

var forecasts = (List<ForecastData>)cache.Get(_RAW_FORECAST_DATA_KEY, null); 

foreach(var custGroup in forecasts.Where(f => f.Year == DateTime.Now.Year).GroupBy(f => f.Customer)) 
{ 
    if(custGroup.Count() > 1) // There's more than one forecast for this customer 
    { 
     foreach(var instance in custGroup) 
     { 
      toReturn.Add(new MultipleCustomer(custGroup.Key) 
      { 
       Salesperson = instance.SalesPersonId, 
       Forecast = instance.Amount 
      }); 
     } 
    } 
} 

return toReturn; 
+0

看看[this](http://stackoverflow.com/a/491832/1466627)。 –

+0

你肯定需要在你的實例上做一筆總和。你是小組將只對客戶對象進行排序 –

回答

2

,如果你改變你的查詢,讓您有一個 「外」 GroupBy和 「內部」 GroupBy我認爲,它會解決你的問題:

var forecasts = (List<ForecastData>)cache.Get(_RAW_FORECAST_DATA_KEY, null); 

var forecastGroups = forcasts 
    .Where(f => f.Year = DateTime.Now.Year) 
    .GroupBy(f => f.Customer) 
    .Where(grp => grp.Count() > 1) 
    .Select(grp => new { Key = grp.Key, SalesGroups = grp.GroupBy(f => f.SalesId) }); 

foreach(var custGroup in forecastGroups) 
{ 
    if(custGroup.SalesGroups.Count() > 1) 
    { 
     foreach(var salesGroup in custGroup.SalesGroups) 
     { 
      toReturn.Add(new MultipleCustomer(custGroup.Key) 
      { 
       Salesperson = salesGroup.Key, 
       Forecast = salesGroup.Sum(f => f.Amount) 
      }); 
     } 
    } 
} 

return toReturn; 
+0

我這樣做,但我仍然沒有得到我需要的結果。我覺得我需要先由客戶進行分組,如果計數大於1,則由DISTINCT銷售人員組成,如果有多個客戶,我想要顯示該客戶的所有銷售人員的金額總和 – Thelonias

+0

我剛剛更新了我的答案,但根據你的評論,我想我需要修改一下。 – devuxer

+0

只是再次更新,是否解決了它? – devuxer

2

嘗試以下操作:

foreach(var custGroup in forecasts.Where(f => f.Year == DateTime.Now.Year).GroupBy(f => new { f.Customer, f.SalesPersonId }).Where(k => k.Count() > 1).Select(k => new { Customer = k.Key.Customer, SalesPersonId = k.Key.SalesPersonId, TotalAmount = k.Sum(x => x.Amount) }) 
{ 
      toReturn.Add(new MultipleCustomer(custGroup.Customer) 
      { 
       Salesperson = custGroup.SalesPersonId, 
       Forecast = custGroup.TotalAmount 
      }); 
     } 
    } 
} 

我一直在寫我的頭。附近沒有C#編譯器,所以可能會有一些錯誤。

在這裏你的問題的關鍵是你需要彙總你的項目總和他們的金額。

+0

這只是最終結果爲我提供每次預測,其中金額由客戶/銷售人員分組合計 – Thelonias