通过LINQ将存储过程输出转换为对象

时间:2014-03-14 11:29:18

标签: c# linq entity-framework

我的存储过程以下列格式返回数据

Hierarchy表:

ParentId ChildId  ParentName  ChildName
  1         9     AAA          BBB
  1        10     AAA          CCC
  1        11     AAA          DDD

此数据可以链接到主表,该主表包含父和子实体的其他属性,例如Name等。

Person表:

  Id     Name    Age
   1      AAA     40
Id表格中的

PersonHierarchy表格相关联。

我需要将其转换为以下

Public Class HierarchyData
{
      public Person Parent {get;set;}
      List<Person> Children {get;set}
}

我正在调用存储过程并将输出存储在var。

this.context.ExecuteQuery<Hierarchy>(MyStoreProc, Paramerters);

Public Class Hierarchy
{
   public int ParentId {get;set;}
   public int ChildId {get;set;}
}

您能否建议如何将其转换为List<HierarchyData>

1 个答案:

答案 0 :(得分:1)

说,列表的类型为List<Hierarchy>。然后您可以运行以下代码:

var hierarchyDataList = 
list
 .GroupBy(x => x.ParentId)
 .Select(g => new HierarchyData
                  {
                      Parent = new Person
                                   {
                                       Id = g.Key
                                       Name = g.First().ParentName  // NAME FIELD ADDED
                                   },
                      Children = g.Select(x => new Person 
                                                   { 
                                                       Id = x.ChildId, 
                                                       Name = x.ChildName
                                                   }
                                         )
                  }
        );

修改

Name的每个Parent属性中添加了

HierarchyData字段。