-3

plsは、データテーブル入力1のデータを出力テーブル1に配置する必要があります

  Module  | date(year) |  xrate |  yrate  |  cumrate
----------+------------+--------+---------+---------
 No2_gft       2013        50      65         458
 No2_gft       2014        59      69         458
 No2_gft       2015        59      69         458

 No2_gft       2016        59      65         458

 No3_gft       2013        50      65         458
 No3_gft       2014        59      69         458
 No3_gft       2015        59      69         458

 No4_gft       2016        59      65         458
 No4_gft       2013        50      65         458
 No4_gft       2014        59      69         458
 No4_gft       2015        59      69         458
 No3_gft       2016        59      69         458

モジュール; 値の型; y2013; 2014; 2015; 2016年

No2_gft; ; xrate; 50; 65; 458

No2_gft yrate 65 69

転置のように

4

1 に答える 1

1

データをどのように集約または配置するかは明確ではありませんが、データを集約する場合は、次のようにするyearことができます。

var query = modules.GroupBy( m => m.date)
                   .Select( g => 
                                 new 
                                 { 
                                     y = g.Key, 
                                     xrate = g.FirstOrDefault( x=> x.xrate),
                                     yrate = g.FirstOrDefault( x => x.yrate)
                                 });

FirstOrDefault()これにより、を集計関数としてグループ化した年のリストが表示されます。

 Year  |   xrate  |  yrate
-------+----------+--------
 2013       50        65
 2014       59        69

または、匿名タイプでグループ化することもできます。

.GroupBy( m => 
          new
          {
              m.date,
              m.xrate,
              m.yrate
          })

m.dateだけでなく、、、はdateすべての行で同じですxrateyrate

編集:まあ、このモジュールのリストをピボットするために、私はこれよりも短くて簡単なものを見つけることができませんでした:

var query = Modules.GroupBy(m => m.ModuleValue)
    .Select(g => new { ModuleValue = g.Key, Values = g });
Func<Module, bool> matchy2013 = m => m.Year == 2013;
Func<Module, bool> matchy2014 = m => m.Year == 2014;
Func<Module, bool> matchy2015 = m => m.Year == 2015;
Func<Module, bool> matchy2016 = m => m.Year == 2016;

IList<NewModule> PivotedModules = new List<NewModule>();

foreach (var item in query)
{
    var xrateRow = new NewModule
    {
        ModuleValue = item.ModuleValue,
         ValueType = "xrate",
         y2013 = item.Values.Where(matchy2013).FirstOrDefault().xrate,
         y2014 = item.Values.Where(matchy2014).FirstOrDefault().xrate,
         y2015 = item.Values.Where(matchy2015).FirstOrDefault().xrate,
         y2016 = item.Values.Where(matchy2016).FirstOrDefault().xrate
     };

     var yrateRow = new NewModule
     {
         ModuleValue = item.ModuleValue,
         ValueType = "yrate",
         y2013 = item.Values.Where(matchy2013).FirstOrDefault().yrate,
         y2014 = item.Values.Where(matchy2014).FirstOrDefault().yrate,
         y2015 = item.Values.Where(matchy2015).FirstOrDefault().yrate,
         y2016 = item.Values.Where(matchy2016).FirstOrDefault().yrate
      };

      var cumrateRow = new NewModule
      {
          ModuleValue = item.ModuleValue,
          ValueType = "cumrate",
          y2013 = item.Values.Where(matchy2013).FirstOrDefault().cumrate,
          y2014 = item.Values.Where(matchy2014).FirstOrDefault().cumrate,
          y2015 = item.Values.Where(matchy2015).FirstOrDefault().cumrate,
          y2016 = item.Values.Where(matchy2016).FirstOrDefault().cumrate
       };
       PivotedModules.Add(xrateRow);
       PivotedModules.Add(yrateRow);
       PivotedModules.Add(cumrateRow);
}

トレイを渡してください。新しいクラスを追加する必要があります。

public class NewModule
{
    public string ModuleValue { get; set; }
    public string ValueType { get; set; }
    public int y2013 { get; set; }
    public int y2014 { get; set; }
    public int y2015 { get; set; }
    public int y2016 { get; set; }
}

PivotedModulesには、次のデータが含まれている必要があります。

          Module  |  ValueType |  2013  |  2014  |  2015  | 2016
         ---------+------------+--------+--------+--------+------
         No2_gft       xrate       50       59       59      59
         No2_gft       yrate       65       69       69      65
         No2_gft      cumrate     458       458     458     458

         No3_gft       xrate       50       59       59      59
         No3_gft       yrate       65       69       69      69
         No3_gft      cumrate     458       458     458     458

         No4_gft       xrate       50       59       59      59
         No4_gft       yrate       65       69       69      65
         No4_gft      cumrate     458       458     458     458
于 2012-04-16T12:24:35.080 に答える