2014-12-08 61 views
0
我有以下数据为::

获取分组数据视图模型

(I/P) 
UserID Name  Date  Amount 
1  Rahul 2014-04-01  10 
1  Rahul 2014-05-01  20 
1  Rahul 2014-06-01  30 
1  Rahul 2014-07-01  40 
1  Rahul 2014-08-01  50 
1  Rahul 2014-09-01  60 
1  Rahul 2014-10-01  70 

,我想我的输出为::

(O/P) 
UserID  Name First    Second    Third    Fourth    Fifth 
1   Rahul (2014-04-01,10) (2014-05-01,20)  (2014-06-01,30)  (2014-07-01,40)  (2014-08-01,50) 

我使用LINQ查询这一点,但我怎样才能得到我的预期高于产量。 在SQL或LINQ中。

+0

请做一些关于LINQ + Pivot的研究。 – 2014-12-08 08:09:54

+0

@GertArnold是这对我有效。 – Rahul 2014-12-09 08:23:19

回答

1

我有我自己的问题的答案, 与他人分享以供将来参考

1) 我已经做了两个的ViewModels为::

public class MonthViewModel 
    { 
     public DateTime MonthName { get; set; } 
     public decimal Amount { get; set; } 
    } 

    public class ParentViewModel 
    { 
     public long ID { get; set; } 
     public string Name { get; set; } 

     //For Months 
      public decimal FirstMonth { get; set; } 
      public decimal SecondMonth { get; set; } 
      public decimal ThirdMonth { get; set; } 
      public decimal FourthMonth { get; set; } 
      public decimal FifthMonth { get; set; } 
      public decimal SixthMonth { get; set; }   
    } 

2)然后通过在获取数据格式像::

(I/P) 
UserID Name  Date  Amount 
1  Rahul 2014-04-01  10 
1  Rahul 2014-05-01  20 
1  Rahul 2014-06-01  30 
1  Rahul 2014-07-01  40 
1  Rahul 2014-08-01  50 
1  Rahul 2014-09-01  60 
1  Rahul 2014-10-01  70 

我使用LINQ +透视功能::

DateTime CurrentDate = Datetime.UtcNow; 
var DetailsList = DataList 
      .GroupBy(x => new { x.ID, x.Name }) 
      .Select(x => new ParentViewModel 
         { 
          ID=x.Key.ID, 
          Name=x.Key.Name, 
          FirstMonth=x.Where(y=>y.Month==CurrentDate).Sum(y=>y.Amount) , 
          SecondMonth=x.Where(y=>y.Month==CurrentDate.AddMonths(-1)).Sum(y=>y.Amount) , 
          ThirdMonth=x.Where(y=>y.Month==CurrentDate.AddMonths(-2)).Sum(y=>y.Amount) , 
          FourthMonth=x.Where(y=>y.Month==CurrentDate.AddMonths(-3)).Sum(y=>y.Amount) , 
          FifthMonth=x.Where(y=>y.Month==CurrentDate.AddMonths(-4)).Sum(y=>y.Amount) , 
         } 
      ).ToList(); 

那就是它。