2009-10-16 65 views
-1

我尝试了一些代码来获得“运行总计”和“小计”,但确实取得了成功的结果。Linq-运行总计和小计

当代码给出:

var salesPeople = 
new SalesPerson[] 
{ 
new SalesPerson{Name="Ricky", RegionCode="R001",SalesAmount=100, 
SalesDate=Convert.ToDateTime("01/Jan/2009")}, 

new SalesPerson{Name="Mark", RegionCode="R001",SalesAmount=200, 
SalesDate=Convert.ToDateTime("02/Jan/2009")}, 

new SalesPerson{Name="Jon", RegionCode="R001",SalesAmount=400, 
SalesDate=Convert.ToDateTime("10/Jan/2009")}, 

new SalesPerson{Name="Ricky", RegionCode="R001",SalesAmount=100, 
SalesDate=Convert.ToDateTime("05/Jan/2009")}, 

new SalesPerson{Name="Mark", RegionCode="R001",SalesAmount=200, 
SalesDate=Convert.ToDateTime("07/Jan/2009")}, 

new SalesPerson{Name="Jon", RegionCode="R001",SalesAmount=250, 
SalesDate=Convert.ToDateTime("11/Jan/2009")}, 

new SalesPerson{Name="Ricky", RegionCode="R002",SalesAmount=50, 
SalesDate=Convert.ToDateTime("01/feb/2009")}, 

new SalesPerson{Name="Mark", RegionCode="R002",SalesAmount=120, 
SalesDate=Convert.ToDateTime("02/feb/2009")}, 

new SalesPerson{Name="Peter", RegionCode="R002",SalesAmount=30, 
SalesDate=Convert.ToDateTime("10/feb/2009")}, 

new SalesPerson{Name="Ricky", RegionCode="R002",SalesAmount=400, 
SalesDate=Convert.ToDateTime("05/feb/2009")}, 

new SalesPerson{Name="Mark", RegionCode="R002",SalesAmount=70, 
SalesDate=Convert.ToDateTime("07/feb/2009")}, 

new SalesPerson{Name="Peter", RegionCode="R002",SalesAmount=60, 
SalesDate=Convert.ToDateTime("11/feb/2009")} 

}; 

我怎样才能找到总计,小计,RunningTotal类同下列之一。

 (1) Running Total Based on Region and Month 

          Sales History 
     ------------------------------------------------------------- 
     Region Code  Name  MonthyRunningTotal  SalesDate   
                  (By Month) 

     ------------------------------------------------------------- 

     R001   Ricky  100     01/Jan/2009 
     R001   Ricky  200     05/Jan/2009 


     R002   Ricky   50     01/feb/2009 
     R002   Ricky  450     05/feb/2009 

     R001   Mark   200     02/Jan/2009 
     R001   Mark   400     07/Jan/2009 


     R002   Mark  120     02/feb/2009 
     R002   Mark  190     07/feb/2009 

     R001   Jon   400     10/Jan/2009 
     R001   Jon   650     11/Jan/2009 

     R002   Peter  30     10/feb/2009 
     R002   Peter  90     11/feb/2009 

   (2) Total and Subtotal based on Region and Month 

        Sales History (Based on Region and Month) 
     ------------------------------------------------------------- 
     Region Code  Name  MonthyRunningTotal  SalesDate   
                  (By Month)  
     ------------------------------------------------------------- 

     R001   Ricky  100     01/Jan/2009 
     R001   Ricky  100     05/Jan/2009 

         Total  ---- 
            200 
            ---- 

     R002   Ricky   50     01/feb/2009 
     R002   Ricky  400     05/feb/2009 

         Total  ---- 
            450 
            ----  

     R001   Mark   200     02/Jan/2009 
     R001   Mark   200     07/Jan/2009 

         Total  ----- 
            400 
            ----- 

     R002   Mark  120     02/feb/2009 
     R002   Mark   70     07/feb/2009 

         Total  ---- 
            190 
            ---- 

     R001   Jon   400     10/Jan/2009 
     R001   Jon   250     11/Jan/2009 
            ---- 
            650 
            ---- 

     R002   Peter  30     10/feb/2009 
     R002   Peter  60     11/feb/2009 
            ----- 
            90 
            ----- 

回答

-1

利用集团总:

from s in SalesPeople 
group s by s.RegionCode into g 
select new {Category=g.Key, Sum = g.Group.Sum(p => p.SalesAmount)} 

参见http://www.develop-one.net/blog/2007/11/11/LINQSumAndGroupBy.aspx

+0

这不回答OP的问题 – Tion

+0

不回答问题。请参阅http://stackoverflow.com/questions/1834753/linq-to-sql-and-a-running-total-on-ordered-results – Peter

+0

我需要导入哪些命名空间才能使用.Group? .Group上出现编译器错误(您是否缺少程序集引用或使用指令) –

13

我发现这个问题,而寻找一个答案的运行总量问题。我很失望,答案似乎没有解决这个问题,所以我问我自己的question,并得到了一个很好的答案。希望这可以帮助任何尝试运行总计的人。