Linq:将扁平结构转换为分层结构

Ste*_*ger 13 c# linq

转换扁平结构的最简单,最有效的方法是什么:

object[][] rawData = new object[][] 
{ 
  { "A1", "B1", "C1" }, 
  { "A1", "B1", "C2" },
  { "A2", "B2", "C3" }, 
  { "A2", "B2", "C4" }
  // .. more 
};
Run Code Online (Sandbox Code Playgroud)

进入分层结构:

class X
{
  public X () 
  {
    Cs = new List<string>();
  }
  public string A { get; set; }
  public string B { get; set; }
  public List<string> Cs { get; private set; }
}
Run Code Online (Sandbox Code Playgroud)

结果应该是这样的

// pseudo code which describes structure:
result =
{
  new X() { A = "A1", B = "B1", Cs = { "C1", "C2" } },
  new X() { A = "A2", B = "B2", Cs = { "C3", "C4" } }
}
Run Code Online (Sandbox Code Playgroud)

优选使用Linq延伸方法.目标类X可以改变(例如,列表的公共设置者),只有在现在不可能/有用的情况下才会改变.

And*_*rey 7

对于这个特例:

   .GroupBy( x => new { a = x[0], b = x[1] } )
   .Select( x => new { A = x.Key.a, B = x.Key.b, C = x.Select( c => c[2] ) })
Run Code Online (Sandbox Code Playgroud)