在 linq 中透视数据

发布于 2024-11-08 19:53:27 字数 690 浏览 0 评论 0原文

我有一个数据集,它返回这组结果:

Date      |Location |Amount
11.03.2011|Location1|  1000  
11.03.2011|Location2|  1000  
11.03.2011|Location3|  1000  
12.03.2011|Location1|  1000    
12.03.2011|Location2|  1000    
12.03.2011|Location3|  1000  
13.03.2011|Location4|  1000 

我需要以这种方式排列我的数据:

Location | 11.03.2011|12.03.2011|13.03.2011|    
Location1|       1000|      1000|         0|  
Location2|       1000|      1000|         0|  
Location3|       1000|      1000|         0|  
Location4|          0|         0|      1000|  

请注意:我不知道行中的日期,所以我不可能使用“if”子句(例如:如果date == DateTime.Parse(11.03.2011))。

我希望我的解释是清楚的。

I've a data set which returns me this set of results:

Date      |Location |Amount
11.03.2011|Location1|  1000  
11.03.2011|Location2|  1000  
11.03.2011|Location3|  1000  
12.03.2011|Location1|  1000    
12.03.2011|Location2|  1000    
12.03.2011|Location3|  1000  
13.03.2011|Location4|  1000 

I need to arrange my data in this way:

Location | 11.03.2011|12.03.2011|13.03.2011|    
Location1|       1000|      1000|         0|  
Location2|       1000|      1000|         0|  
Location3|       1000|      1000|         0|  
Location4|          0|         0|      1000|  

Notice that: I don't know the dates in the rows so it's impossible for me to work with "if" clause (e.g.: if date == DateTime.Parse(11.03.2011)).

I hope that my explanation is clear.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

初见你 2024-11-15 19:53:27

试试这个:

var Locations = Data.GroupBy(l => l.Location);
                .SelectMany( g => 
                             new 
                             { 
                                 LocationName = g.Key, 
                                 Amounts = g 
                             });

Func<Location, bool> matchMonth11 = l => l.Date == "11.03.2011";
Func<Location, bool> matchMonth12 = l => l.Date == "12.03.2011";
Func<Location, bool> matchMonth13 = l => l.Date == "13.03.2011";

var PivotedLocations = new List<PivotedLocation>();

foreach(var item in Locations )
{
    PivotedLocations.Add( new PivotedLocation
                          {
                              LocationName  = item.LocationName,
                              month11Amount = item.Amounts.Where(matchMonth11)
                                              .FirstOrDefault().Amount,
                              month12Amount = item.Amounts.Where(matchMonth12)
                                              .FirstOrDefault().Amount,
                              month13Amount = item.Amounts.Where(matchMonth13)
                                              .FirstOrDefault().Amount
                          });

}

您应该首先定义以下类:

public class PivotedLocation
{
    public string LocationName { get; set; }
    public int month11Amount { get; set; }
    public int month12Amount { get; set; }
    public int month13Amount { get; set; }
}

然后 PivotedLocations 列表应该包含您想要的透视形式的数据。

Try this:

var Locations = Data.GroupBy(l => l.Location);
                .SelectMany( g => 
                             new 
                             { 
                                 LocationName = g.Key, 
                                 Amounts = g 
                             });

Func<Location, bool> matchMonth11 = l => l.Date == "11.03.2011";
Func<Location, bool> matchMonth12 = l => l.Date == "12.03.2011";
Func<Location, bool> matchMonth13 = l => l.Date == "13.03.2011";

var PivotedLocations = new List<PivotedLocation>();

foreach(var item in Locations )
{
    PivotedLocations.Add( new PivotedLocation
                          {
                              LocationName  = item.LocationName,
                              month11Amount = item.Amounts.Where(matchMonth11)
                                              .FirstOrDefault().Amount,
                              month12Amount = item.Amounts.Where(matchMonth12)
                                              .FirstOrDefault().Amount,
                              month13Amount = item.Amounts.Where(matchMonth13)
                                              .FirstOrDefault().Amount
                          });

}

You should first define the following class:

public class PivotedLocation
{
    public string LocationName { get; set; }
    public int month11Amount { get; set; }
    public int month12Amount { get; set; }
    public int month13Amount { get; set; }
}

Then the PivotedLocations list should contain the data in a pivoted form like what you want.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文